根据计算值查找所有重复项的列表

时间:2014-04-23 21:34:23

标签: php mysql

使用MySQL,我试图从给定列表中所有团队的列表中获取仅列出并列(具有相同数量的胜利)的团队的列表。要计算每个团队的胜利,我在按团队分组时使用SUM功能。

到目前为止,我已创建此查询:

SELECT results.DATE, 
    results.team1, 
    SUM(results.win) AS WINS, 
    SUM(results.lose) AS LOSSES, 
    SUM(results.pt_diff) AS PT_DIFF, 
    event_team.div_sname, 
    event_team.pool_name 
FROM results, 
    event_team, 
    matches
WHERE results.team1 = event_team.team_id
    AND results.sched_id = matches.sched_id
    AND matches.match_type = 'pool'
    AND event_team.div_sname = 'C4A'
    AND event_team.pool_name = 'Pool_C4A_1'
    AND event_team.event_id = 25
GROUP BY results.team1
ORDER BY event_team.pool_name, wins DESC, losses ASC, PT_DIFF DESC

此查询返回整个团队列表及其

DATE         team1  WINS    LOSSES  PT_DIFF  div_sname  pool_name   
----------  ------  ------  ------  -------  ---------  ------------
2014-09-06      54  9       3       28       C4A        Pool_C4A_1  
2014-09-06      62  6       6       -2       C4A        Pool_C4A_1  
2014-09-06      55  5       7       1        C4A        Pool_C4A_1  
2014-09-06      59  5       7       -7       C4A        Pool_C4A_1  
2014-09-06      65  5       7       -20      C4A        Pool_C4A_1

如何消除上面例子中的前两行,这样我才能获得55,59和65个队伍,每个队伍各得5胜?请注意,我的整体结果中可能存在多重联系,因此任何解决方案都必须捕获所有具有联系的团队,即使这些团队之间的胜利不同。

我已经尝试了以下但是在进一步阅读后,似乎我不能通过聚合函数GROUP BY。我怎么能接近这个呢?

SELECT results.DATE, 
    results.team1, 
    SUM(results.win) AS WINS, 
    event_team.div_sname, 
    event_team.pool_name
FROM results, 
     event_team, 
     matches
WHERE results.team1 = event_team.team_id
    AND results.sched_id = matches.sched_id
    AND matches.match_type = 'pool'
    AND event_team.div_sname = 'C4A'
    AND event_team.pool_name = 'Pool_C4A_1'
    AND event_team.event_id = 25
GROUP BY WINS
HAVING COUNT(WINS) >1

提前感谢所有回复!

1 个答案:

答案 0 :(得分:0)

这是一个解决方案:

SELECT
    results.DATE, 
    results.team1, 
    results.win, 
    event_team.div_sname, 
    event_team.pool_name
FROM results, 
     event_team, 
     matches
WHERE results.team1 = event_team.team_id
    AND results.sched_id = matches.sched_id
    AND matches.match_type = 'pool'
    AND event_team.div_sname = 'C4A'
    AND event_team.pool_name = 'Pool_C4A_1'
    AND event_team.event_id = 25

    AND results.win IN (SELECT results.win FROM results GROUP BY results.win HAVING COUNT(*)>1)

这将为您提供如下所示的结果集:

+------------+-------+-----+-----------+------------+
| DATE       | team1 | win | div_sname | pool_name  |
+------------+-------+-----+-----------+------------+
| 2014-09-06 |    55 | 5   | C4A       | Pool_C4A_1 |
| 2014-09-06 |    59 | 5   | C4A       | Pool_C4A_1 |
| 2014-09-06 |    65 | 5   | C4A       | Pool_C4A_1 |
+------------+-------+-----+-----------+------------+

该子查询只选择所有获胜次数,其中有多行具有该获胜次数。