Mysql 如果有计数,则选择总和

Mysql 如果有计数,则选择总和,mysql,sql,phpmyadmin,Mysql,Sql,Phpmyadmin,我有三张桌子 表艺术家,艺术家id,姓名 带有唱片集id、艺术家id、名称的表格唱片集 有歌曲id、艺术家id、专辑id的表格歌曲,还有其他一些东西,但我认为它们对于这个问题不是必需的 我想选择一个表,其中包含艺术家的姓名、包含等于或多于10首歌曲的专辑数量、包含少于10首歌曲的专辑数量 要计算每个专辑中的歌曲数,请执行以下操作: select album.name, count(DISTINCT songs.song_id) from album inner join faixas on al

我有三张桌子 表艺术家,艺术家id,姓名

带有唱片集id、艺术家id、名称的表格唱片集

有歌曲id、艺术家id、专辑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
现在我意识到,如果在某个地方像这样,我将不得不进行求和,并进行多个选择,只是不知道如何将两者连接起来

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

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

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;
除了n al.album\u id=a.album\u id加入,必须与艺术家的id和小细节一起改变,它起作用了。非常感谢!