sql >> Database teknologi >  >> RDS >> Mysql

Hvordan skriver man største n pr. gruppe forespørgsel, men med yderligere betingelser?

Dette kræver en vis opmærksomhed, hvor betingelsen skal placeres (til where eller til on ?) så du ikke bliver snydt :-) Du skal tilføje betingelsen for t1 til where klausul og for t2 til 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 ikke testet det, men det burde virke.

Forsøg på en forklaring: betingelsen i hvor-klausulen påvirker hvilke elementer du betragter som potentielle elementer med lavest værdi. Mens betingelsen i on klausul påvirker koblingen:med hvilke andre elementer vil du sammenligne det? Det definerer den gruppe, du sammenligner inden for. Teknisk set har det indflydelse på, hvornår t2.* bliver NULL. Havde du givet betingelsen om t2.popularitet til where i stedet vil du ikke modtage nogen NULL'er (dvs. ikke finde elementer med laveste værdi) for grupper, hvor de laveste elementer har lav popularitet.




  1. Ugyldigt fælles bruger- eller rollenavn

  2. TO_YMINTERVAL() Funktion i Oracle

  3. Hvordan opretter du en skrivebeskyttet bruger i PostgreSQL?

  4. SQL datoformat