Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да напиша най-голямото n за заявка от тип група, но с допълнителни условия?

Това изисква известно внимание къде да се постави условието (до where или до on ?), за да не бъдете подведени :-) Трябва да добавите условието за t1 към where клауза и за t2 до on клауза:

SELECT t1.type, t1.name, t1.value
FROM mytable t1
LEFT JOIN mytable t2 ON t1.type = t2.type AND t1.value > t2.value 
    AND t2.popularity > 3 /* here */
WHERE t2.value IS NULL 
    AND t1.popularity > 3 /* and here */

Не съм го тествал, но трябва да работи.

Опит за обяснение: условието in where клаузата засяга кои елементи считате за потенциални елементи с най-ниска стойност. Докато условието в on клаузата засяга връзката:с какви други елементи искате да я сравните? Той определя групата, в която сравнявате. Технически, това оказва влияние върху това кога t2.* ще бъде NULL. Бяхте ли дали условието за t2.popularity на where клауза вместо това, няма да получите никакви NULL (т.е. да не намерите елементи с най-ниска стойност) за групи, където най-ниските елементи имат ниска популярност.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Диаграма за актуализиране от падащ избор

  2. Разбиране на изгледите в SQL

  3. SQL:Създаване на релационна таблица с 2 различни auto_increment

  4. Как да преминете през масив от входове във формуляр?

  5. Пролетна транзакция и връщане назад на множество таблици