Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql sql查询所需的建议。需要计算一首歌在音乐节上播放的时间,以及它在决赛中获胜的次数_Mysql_Sql_Count_Subquery - Fatal编程技术网

Mysql sql查询所需的建议。需要计算一首歌在音乐节上播放的时间,以及它在决赛中获胜的次数

Mysql sql查询所需的建议。需要计算一首歌在音乐节上播放的时间,以及它在决赛中获胜的次数,mysql,sql,count,subquery,Mysql,Sql,Count,Subquery,希望您能帮助我,这是表格的结构: codIscr(识别歌曲、播放者和播放事件)(使用dataser主键) dataser(播放它的事件的日期) 投票 Posizione(相对于日期的位置,活动最后日期的获胜者为最终获胜者) 这是我使用的查询: SELECT X.codIscr, count(X.codIscr=Y.codIscr),count(X.Posizione=1 AND Y.Posizione=1) FROM concorre X, concorre Y WHERE

希望您能帮助我,这是表格的结构: codIscr(识别歌曲、播放者和播放事件)(使用dataser主键) dataser(播放它的事件的日期) 投票 Posizione(相对于日期的位置,活动最后日期的获胜者为最终获胜者)

这是我使用的查询:

SELECT X.codIscr, count(X.codIscr=Y.codIscr),count(X.Posizione=1 AND Y.Posizione=1) 
    FROM concorre X, concorre Y 
     WHERE X.codIscr=Y.codIscr AND X.dataSer!=Y.dataSer AND 
            X.codIscr IN(SELECT DISTINCT codIscr FROM iscrizione WHERE codEv=1) 
     GROUP BY X.codIscr HAVING count(X.codIscr=Y.codIscr)>1

它应该给我4个不同的codIscr结果,2个作为歌曲在比赛中播放的时间量(对于所有4个),1个作为他们在比赛中获得第一的次数(在“半决赛”期间等),除了比赛最后日期的获胜者,它应该有2个作为它获得第一的次数。。。相反,所有4首歌曲作为最后一次计数给我2。。。有人能帮忙吗

查询看起来不正确。假设问题如标题所示:“需要计算一首歌在音乐节上播放的时间以及它在决赛中获胜的次数”,我不希望在查询中看到自动加入

我认为您只需要条件聚合:

SELECT c.codIscr, count(*) as TimesPlayed, sum(c.Posizione = 1) as NumTimesFirst
FROM concorre c
GROUP BY c.codIscr;
我不确定iscrizione是做什么的,但是如果你想限制歌曲,你可以在
where
子句中这样做:

SELECT c.codIscr, count(*) as TimesPlayed, sum(c.Posizione = 1) as NumTimesFirst
FROM concorre c
WHERE c.codIscr IN (SELECT i.codIscr FROM iscrizione i WHERE i.codEv = 1) 
GROUP BY c.codIscr;
HAVING count(*) > 1
in
子句中的
distinct
是多余的

如果您想要播放至少两次的歌曲,请添加
having
子句:

SELECT c.codIscr, count(*) as TimesPlayed, sum(c.Posizione = 1) as NumTimesFirst
FROM concorre c
WHERE c.codIscr IN (SELECT i.codIscr FROM iscrizione i WHERE i.codEv = 1) 
GROUP BY c.codIscr;
HAVING count(*) > 1

考虑将适当的DDL(和/或SqLFIDLE)与期望的结果集一起提供