我找到了一个很棒的网站来练习sql - http://sqlzoo.net。我的sql非常弱,这就是为什么我想通过在线练习来改进它。但我有一个我无法解决的问题。你可以帮我一把。
3A。查找出现在2张以上相册中的歌曲。包括每次出现次数的计数。
专辑(asin,标题,艺术家,价格,发行,标签,排名) 曲目(专辑,dsk,posn,歌曲)
我的回答是不正确的,因为我运行了查询。
select a.song, count(a.song) from track a, track b
where a.song = b.song
a.album != b.album
group by a.song
having count(a.song) > 2
提前谢谢! :d
答案 0 :(得分:5)
我意识到这个答案可能会迟到,但是为了将来参考本教程的任何人,答案都是这样的
SELECT track.song, count(album.title)
FROM album INNER JOIN track ON (album.asin = track.album)
GROUP BY track.song
HAVING count(DISTINCT album.title) > 2
我在您查询此查询时帮助您的一些事情是,分组的内容通常由每个单词指定。根据前面答案中提供的提示,您希望通过不同的专辑进行选择,SINCE在数据库描述中提到,当两个表连接时将重复专辑标题
答案 1 :(得分:1)
您的原始答案非常接近,包括GROUP BY和HAVING子句。有什么不对,只是你不需要加入跟踪表来对抗自己。
SELECT song, count(*)
FROM track
GROUP BY song
HAVING count(*) > 2
此处的另一个答案是使用COUNT(DISTNCT专辑),只有当歌曲不止一次出现在专辑中时才需要。
答案 2 :(得分:0)
如果它们支持嵌套查询,您可以:
Select song, count(*)
from(
select a.song
from track a
group by a.song, a.album
having count(*) > 1
)
group by song
或(编写它的最佳方式)如果它们支持这种语法:
select a.song, count(distinct a.album)
from track a
group by a.song
having count(distinct a.album) > 1