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

Vysvětlete prosím funkčnost select max(...) ... group by in sql

V případě použití MAX() GROUP BY klauzule v podstatě říká dotazovacímu stroji, jak seskupit položky, ze kterých lze určit maximum. Ve vašem prvním příkladu jste vybírali pouze jeden sloupec, takže nebylo nutné seskupování. Ale ve vašem druhém příkladu jste měli více sloupců. Takže musíte dotazovacímu modulu sdělit, jak určit, které z nich budou porovnávány, abyste našli maximum.

Řekli jste, že se má seskupit podle id sloupec. Což znamená, že porovná záznamy, které mají stejné id a poskytne vám maximum pro každé jedinečné id . Protože každý záznam má jiné id , s tou klauzulí jste v podstatě nic neudělali.

Seskupil všechny záznamy s id z 1 (což byl jeden záznam) a vrátil záznam s maximálním id z té skupiny (což byl ten záznam). Totéž udělalo pro 2 , 3 , atd.

V případě tří zde uvedených sloupců by jediné místo, kde by mělo smysl seskupit záznamy, bylo na test_id sloupec. Něco takového:

SELECT MAX(id), title, test_id
FROM images
WHERE image IS NOT null 
GROUP BY test_id

Tím by se seskupily podle test_id , takže výsledky budou zahrnovat záznamy 6 (maximální id pro test_id 0), 4 (maximální id pro test_id 1) a 8 (maximální id pro test_id 2). Rozdělením záznamů do těchto tří skupin na základě tří jedinečných hodnot v test_id může efektivně najít "maximální" id v každé skupině.



  1. Jak namapovat nativní dotaz na POJO, když v projektu nemám žádnou entitu?

  2. Vyberte sloupec s názvem klíčového slova

  3. INT(3) sloupec neořezává hodnotu na vhodnou délku a umožňuje vložení plné hodnoty - MySQL

  4. Zobrazte hodnoty datetime do různých řádků v DataGridView