如何显示拥有最多歌曲的歌手的名字

How to Display the name of singer who has the maximum number of songs

嗨,我是初学者,我想显示歌曲中歌曲数量最多的歌手姓名 table 但我没能做到这一点,因为子查询不能一次 return 两个值。我怎么解决这个问题。下面的代码显示了此错误 -> 当子查询未使用 EXISTS 引入时,只能在 select 列表中指定一个表达式。

这是我的代码 ->

SELECT Singer_Name
FROM Singer
WHERE Singer_id IN(SELECT TOP 1 Singer.Singer_id,COUNT(SongTitle) TotalSounds 
                    FROM Singer,Songs
                    WHERE Songs.Singer_id=Singer.Singer_id
                    GROUP BY Singer.Singer_id
                    ORDER BY TotalSounds DESC)

这应该可以解决问题:

SELECT TOP 1 n.Singer_Name, count(*) as Song_Count
    FROM Songs s
    INNER JOIN Singer n on n.Singer_id = s.Singer_id
    GROUP BY n.Singer_id, n.Singer_Name
    ORDER BY count(*) DESC

我把 n.Singer_id 添加到组中是因为两个歌手可能有相同的名字。

希望对您有所帮助。

您可以像这样使用 group by 语句:

SELECT Singer_Name, count(SongTitle) c FROM Singer 
  join Song on Song.singer_id = Singer.singer_id 
  group by Singer_Name
  ORDER BY c desc limit 1;

您接近可行的解决方案。问题是您在 where 子句中执行子查询,试图以这种方式限制您的结果,您可以只 return 名称和歌曲数量的完整列表,然后在按计数排序后选择最上面的一首:

SELECT TOP 1 SingerName FROM (SELECT Singer.Singer_Name, count(1) as TotalSounds 
FROM Singer 
JOIN Songs
ON Songs.Singer_id=Singer.Singer_id
GROUP BY Singer.Singer_Name, Singer.Singer_id) ss
ORDER BY TotalSounds DESC

如果你有并列第一名,并且想 return 两个名字,你就做到 TOP 1 WITH TIES 否则它只会抢第一名,按照他们的顺序任意打破平局出现在 table(可能是 Singer_id)