按较低值添加和筛选​(mysql数据库)

inb24sb2  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(196)

我必须这样做:得到的歌手谁用最不同的唱片公司记录的名称。
我有三张table,它们是:
歌手:
cod_singer name_singer 记录:
cod_recording cod_singer record_company cod_song 唱片公司: record_company country cod_song 目前,我可以通过以下代码获得歌手和每个歌手的不同录音:

SELECT DISTINCT s.nome_singer
              , r.cod_reccord  
           FROM singer s
           JOIN reccord r
             ON s.cod_singer = r.cod_singer;

但我不知道每个歌手能录多少张唱片,我知道我必须用 count 也许吧 having .

clj7thdc

clj7thdc1#

对于您的代码值,这就可以了。

SELECT COUNT(DSTINCT record_company) number_of_labels, cod_singer
              FROM recording
             GROUP BY cod_singer

然后你可以加入歌手的行列。。。

SELECT s.singer_name, n.number_of_labels
   FROM singer s
   LEFT JOIN (
            SELECT COUNT(DSTINCT record_company) number_of_labels, cod_singer
              FROM recording
             GROUP BY cod_singer
        ) n ON s.cod_singer = n.cod_singer

专业提示:学习如何使用groupby和各种聚合函数(如count(*)和count(distinct column))所花的每一个小时都是一个很好的时间。sql在这方面提供了巨大的能力。

esbemjvw

esbemjvw2#

你可以做:

select name
from (
  select
    s.cod_singer, 
    max(c.name_singer) as name,
    count(distinct c.record_company) as labels
  from singer s
  join recording r on r.cod_singer = s.cod_singer
  join record_company c on c.cod_son = r.cod_song
  group by s.cod_singer
) x
order by labels desc
limit 1

相关问题