sql >> Databáze >  >> RDS >> Mysql

Jak napsat největší n na dotaz typu skupiny, ale s dalšími podmínkami?

To vyžaduje určitou pozornost, kam umístit podmínku (do where nebo on ?), abyste se nenechali napálit :-) Podmínku pro t1 musíte přidat do where klauzule a pro t2 na on klauzule:

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

Netestoval jsem to, ale mělo by to fungovat.

Pokus o vysvětlení: podmínka, ve které klauzule where ovlivňuje, které prvky považujete za potenciální prvky s nejnižší hodnotou. Zatímco podmínka v on klauzule ovlivňuje vazbu:s jakými dalšími prvky ji chcete porovnat? Definuje skupinu, v rámci které porovnáváte. Technicky to má vliv na to, kdy bude t2.* NULL. Kdybyste dali podmínku na t2.popularity do where místo toho byste neobdrželi žádné hodnoty NULL (tj. nenašli prvky s nejnižší hodnotou) pro skupiny, kde mají nejnižší prvky nízkou popularitu.




  1. Jak zakázat CDC na sadě tabulek NEBO zakázat na všech tabulkách v databázi na SQL Server - SQL Server výukový program

  2. ActiveRecord::StatementInvalid:PG InFailedSqlTransaction

  3. Vyhrazené slovo v názvu sloupce - vložte do MySQL

  4. Získejte data z čísla týdne v T-SQL