首页 > 解决方案 > 选择总和如果并且有计数

问题描述

我有 3 个表艺术家与艺术家ID名称

带有专辑标识艺术家标识名称的表专辑;

带有song_idartist_idalbum_id的表歌曲(还有一些东西,但我认为它们对于这个问题不是必需的);

我想选择一个表,其中包含艺术家的姓名、等于或多于 10 首歌曲的专辑数量、少于 10 首歌曲的专辑数量。

要计算每张专辑中的歌曲数量,请执行以下操作:

select album.name, count(DISTINCT songs.song_id)
from album inner join faixas on album.album_id = songs.album
group by album.name

现在我知道如果在某个地方这样的话,我将不得不进行求和,并且选择超过 1 个,只是看不到如何连接两者

sum(if(count (song_id)>=10,1,0)) and sum(if(count (song_id)<10,1,0))

标签: mysqlsqlphpmyadmin

解决方案


我认为您需要两个级别的聚合,外层有条件聚合:

select a.artist_id, a.name,
       sum(num_songs >= 10) as cnt_10_plus,
       sum(num_songs < 10) as cnt_9_minus,
from artists a join
     album al
     on al.artist_id = a.artist_id join
     (select s.album_id, count(*) as num_songs
      from songs s
      group by s.album_id
     ) s
     on al.album_id = s.album_id
group by a.artist_id, a.name;

推荐阅读