sql >> Database >  >> RDS >> Mysql

Hoe de grootste n per groepstype query te schrijven, maar met aanvullende voorwaarden?

Dit vereist enige aandacht waar de voorwaarde moet worden geplaatst (naar where of naar on ?) zodat je niet in de maling wordt genomen :-) Je moet de voorwaarde voor t1 toevoegen aan where clausule en voor t2 tot on clausule:

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

Ik heb het niet getest, maar het zou moeten werken.

Poging tot uitleg: de voorwaarde in where-clausule beïnvloedt welke elementen u beschouwt als potentiële elementen met de laagste waarde. Terwijl de voorwaarde in on clausule beïnvloedt de koppeling:met welke andere elementen wil je het vergelijken? Het definieert de groep waarbinnen je vergelijkt. Technisch gezien heeft het invloed op wanneer t2.* NULL is. Had je de voorwaarde op t2.popularity gegeven aan where in plaats daarvan ontvangt u geen NULL's (d.w.z. geen elementen met de laagste waarde vinden) voor groepen waar de laagste elementen een lage populariteit hebben.




  1. Oracle - Een alleen-lezen gebruiker maken

  2. Hiaten en eilanden op 2 kolommen - als kolom A opeenvolgend en kolom B identiek is

  3. Een sitemap maken met PHP en MySQL

  4. Waarom en wanneer moet ik SPARSE COLUMN gebruiken? (SQL-SERVER 2008)