sql >> Databasteknik >  >> RDS >> Mysql

Hur skriver man största n per grupp typ fråga, men med ytterligare villkor?

Detta kräver viss uppmärksamhet var villkoret ska placeras (till where eller till on ?) så att du inte blir lurad :-) Du måste lägga till villkoret för t1 till where sats och för t2 till on klausul:

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 */

Har inte testat det, men det borde fungera.

Försök att få en förklaring: villkoret i where-satsen påverkar vilka element du betraktar som potentiella element med lägst värde. Medan villkoret i on klausulen påverkar kopplingen:med vilka andra element vill du jämföra den? Den definierar gruppen inom vilken du jämför. Tekniskt sett har det en inverkan på när t2.* blir NULL. Hade du gett villkoret på t2.popularity till where i stället skulle du inte få några NULLs (dvs. inte hitta element med lägsta värde) för grupper där de lägsta elementen har låg popularitet.




  1. Hur visar man databasposter i vyn utan att upprepa ett fält?

  2. Lägg till veckor till ett datum i PostgreSQL

  3. Hur väljer man bara grupperade poster om varje post i en grupp uppfyller ett visst kriterium i MySQL?

  4. Hämta den näst sista posten för varje användare från databasen