sqlzoo跟踪加入练习

时间:2012-01-01 13:34:27

标签: sql join

我找到了一个很棒的网站来练习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

3 个答案:

答案 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