SQLite
 sql >> база данни >  >> RDS >> SQLite

Комбинирайте SQLite Count() с GROUP BY, за да добавите колона „Count“ към вашия набор от резултати

Ако трябва да добавите колона "count" към резултантния набор от заявка за база данни, когато използвате SQLite, можете да използвате count() функция за предоставяне на броя и GROUP BY клауза, за да посочите колоната, за която да групирате резултатите.

Пример

Ето един бърз пример за демонстрация.

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

Резултат:

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

В този случай идентификаторът на всеки изпълнител е посочен в ArtistId колона, а броят на албумите за този изпълнител е посочен в count(Title) колона.

За да направим това малко по-лесно за четене, ето подобна заявка, но този път връщам името на художника вместо ID. Правя това, като извършвам вътрешно свързване с Изпълнителя таблица.

В този случай добавям WHERE клауза за връщане само на онези изпълнители, които започват с буквата 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;

Резултат:

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

Подреждане по Count()

Можем леко да променим това, така че наборът от резултати да бъде подреден по броя. С други думи, можем да го поръчаме така, че изпълнителите с най-много албуми да бъдат изброени първи и обратно.

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;

Резултат:

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

Всъщност можем да отидем още по-далеч и да добавим псевдоним за count() . Това ще ни освободи от необходимостта да дублираме това в ORDER BY клауза.

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;

Резултат:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Android:onUpgrade не се обажда при надграждане на базата данни

  2. SQLite - Има ли разлика между ограничение на таблица UNIQUE и ограничение на колона UNIQUE?

  3. SQLite Е NULL

  4. Върнете списък с бази данни в SQLite

  5. SQLite COUNT