mysql - 选择总和如果并且有计数
问题描述
我有 3 个表艺术家与艺术家ID,名称;
带有专辑标识、艺术家标识、名称的表专辑;
带有song_id、artist_id、album_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))
解决方案
我认为您需要两个级别的聚合,外层有条件聚合:
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;
推荐阅读
- android - Flutter:失去与设备的连接(生产应用程序)
- javascript - 初始变量未在减速器中定义
- python - 打印出特定文本时如何停止运行工具?
- primefaces - p:datascroller 只延迟加载一次
- swift - 在 SwiftUI 中设置切换颜色
- python - 如何获得整数的倒数?
- java - 通过 http post 下载文件正在返回 zip 文件内容
- javascript - 2 个用于计算的 PDF 字段,字段 3 = 字段 1 - 字段 2
- python - 当且仅当前一个字母不是大写时,如何在大写字母之前插入空格?
- python - 用于创建和写入 csv 任意数量的 DataFrame 的矢量化方法