HAVING-clausel之后的SQL部门

时间:2013-04-23 12:26:45

标签: sql division having

我有一个SQL问题。我有两张桌子:

album (asin(pk), title, artist, price, release, label, rank)
track (album(pk), dsk, posn, song) 

我需要找到价格低于0.5美元的廉价专辑。我如何用divion过滤?到目前为止我的尝试:

SELECT a.title,a.price,COUNT(b.song) 
FROM album a 
JOIN track b 
ON (asin=album) 
GROUP BY album 
HAVING COUNT(a.price / b.song)

我知道这是错的。我对SQL很新,而且令人困惑。我希望你能帮助我。

非常感谢!

2 个答案:

答案 0 :(得分:1)

你需要按a.asin进行分组(我想这是一个独特的专辑ID,标题可能相同),因为你想要的是将所有曲目分组到一行代表专辑。 COUNT(*)将计算分组到此记录中的行数(与相册中的歌曲数量相同)。 HAVING计算平均歌曲价格,并告知仅保留低于0.5的专辑:

SELECT a.title, a.price, COUNT(*)
FROM album a 
JOIN track b ON b.asin=b.album 
GROUP BY a.asin
HAVING a.price / COUNT(*) < 0.5

答案 1 :(得分:1)

  SELECT a.title, a.price, COUNT(b.song) 
    FROM album a
    JOIN track b ON asin=album 
GROUP BY a.title, a.price
  HAVING 1.0 * a.price / COUNT(b.song) < 0.5

JOIN条件asin=album看起来很可疑。通过为列添加表别名来修复它。