2016-06-10 53 views
2

我有一个数据库,用一个时间戳保存收音机上播放的每首歌曲的记录。我试图发现增加的歌曲播放10倍,因为16年6月1日,我跑了这一点:在不同的日期找到总和大于sum的变量的总和

SELECT SONG_ID 
FROM StationPlays 
WHERE StationPlays.DATE > '2016-06-01' AND SONG_ID IN 
(
    SELECT SONG_ID 
    FROM StationPlays 
    WHERE StationPlays.DATE < '2016-06-01' 
    GROUP BY SONG_ID 
    HAVING SUM(SPINS) < 1000 
) 
GROUP BY SONG_ID 
HAVING SUM(SPINS) > 10000 

有没有办法做到这一点编程,我可以只设置1000为变量,并使用10 *可以查找所有在过去x天内增加了10倍(或20倍或更多)的歌曲吗?

回答

2

我会尝试这样的事:

SELECT SONG_ID, COUNT(*) 
FROM StationPlays 
WHERE StationPlays.DATE > '2016-06-01' 
GROUP BY SONG_ID, StationPlays.DATE 
HAVING COUNT(*) > (10 * (SELECT COUNT(*) 
         FROM StationPlays SP2 
         WHERE SP2.DATE > '2016-06-01' 
          AND SP2.SONG_ID = StationPlays.SONG_ID)) 
+0

是否COUNT(*)计算在查询的行数?给子查询一个别名有什么好处? –

+0

我刚刚给Group By添加了“Date”。 Count会统计每天的行数 - 歌曲每天播放的次数。 –