sql >> Databáze >  >> RDS >> SQLite

Zkombinujte SQLite Count() se GROUP BY a přidejte do své sady výsledků sloupec „Count“

Pokud potřebujete přidat sloupec „count“ do sady výsledků databázového dotazu při použití SQLite, můžete použít count() funkce poskytující počet a GROUP BY klauzule k určení sloupce, pro který se mají výsledky seskupit.

Příklad

Zde je rychlý příklad k demonstraci.

SELECT ArtistId, count(Title)
FROM Album
GROUP BY ArtistId
LIMIT 10;

Výsledek:

ArtistId    count(Title)
----------  ------------
1           2           
2           2           
3           1           
4           1           
5           1           
6           2           
7           1           
8           3           
9           1           
10          1           

V tomto případě je ID každého interpreta uvedeno v ArtistId a počet alb pro daného interpreta je uveden v počtu(název) sloupec.

Abychom to trochu usnadnili čtení, zde je podobný dotaz, ale tentokrát místo ID vracím jméno umělce. Dělám to pomocí vnitřního spojení s Umělcem tabulka.

V tomto případě přidám WHERE klauzule vrátit pouze ty umělce, kteří začínají písmenem D .

SELECT 
  ar.Name, 
  count(al.Title)
FROM Album al
INNER JOIN Artist ar
ON ar.ArtistId = al.ArtistId
WHERE ar.Name LIKE 'D%'
GROUP BY ar.Name;

Výsledek:

Name             count(al.Title)
---------------  ---------------
David Coverdale  1              
Deep Purple      11             
Def Leppard      1              
Dennis Chambers  1              
Djavan           2              
Dread Zeppelin   1              

Řazení podle Count()

Můžeme to mírně upravit tak, aby výsledná sada byla uspořádána podle počtu. Jinými slovy, můžeme to seřadit tak, aby umělci s největším počtem alb byli uvedeni jako první a naopak.

SELECT 
  ar.Name, 
  count(al.Title)
FROM Album al
INNER JOIN Artist ar
ON ar.ArtistId = al.ArtistId
WHERE ar.Name LIKE 'D%'
GROUP BY ar.Name
ORDER BY count(al.Title) DESC;

Výsledek:

Name                  count(al.Title)
--------------------  ---------------
Deep Purple           11             
Djavan                2              
David Coverdale       1              
Def Leppard           1              
Dennis Chambers       1              
Dread Zeppelin        1              

Ve skutečnosti můžeme jít ještě o krok dále a přidat alias pro count() . To nás zbaví nutnosti duplikovat to v ORDER BY doložka.

SELECT 
  ar.Name, 
  count(al.Title) AS AlbumCount
FROM Album al
INNER JOIN Artist ar
ON ar.ArtistId = al.ArtistId
WHERE ar.Name LIKE 'D%'
GROUP BY ar.Name
ORDER BY AlbumCount DESC;

Výsledek:

Name                  AlbumCount
--------------------  ----------
Deep Purple           11        
Djavan                2         
David Coverdale       1         
Def Leppard           1         
Dennis Chambers       1         
Dread Zeppelin        1         

  1. PostgreSQL:Pusťte databázi PostgreSQL pomocí příkazového řádku

  2. Nasazení LocalDB na klientském PC

  3. Pomozte nám modernizovat IDE v MS Access – váš hlas se počítá!

  4. Funkce MySQL CEILING() – zaokrouhlení nahoru na nejbližší celé číslo