繁体   English   中英

当聚合函数相等时,MySQL Group返回多个结果

[英]MySQL Group returns multiple results when aggregate function is equal

我正在尝试从数据库表中获取结果列表(“结果”),但是,每个成员可能都提交了多个结果,因此我希望获得他们的最佳时间。

下面的查询有效(尽管我不确定它是否有效),除非同一竞争对手在同一时间获得了多个结果。 (例如,竞争对手2得分两次32.15秒)。 在这种情况下,我为此竞争对手得到两行,而不是我想要的那一行。

SELECT result_id FROM ( 
    SELECT member_id,MIN(time) AS mintime FROM result 
        JOIN member_result ON result.id = member_result.result_id 
        WHERE event_id = ? 
        GROUP BY member_id ORDER BY mintime ) AS x 
JOIN result ON result.time = x.mintime
JOIN member_result ON member_result.result_id = result.id
AND member_result.member_id = x.member_id

任何解决该问题的建议都会收到。

编辑:表结构按要求;

member_result (TABLE)
 id int unsigned (10)
 result_id int unsigned (10)
 member_id int unsigned (10)
 club_id int unsigned (10)

result (TABLE)
 id int unsigned (10)
 time decimal (6)
 is50mPool BIT ()
 date date ()
 verified BIT ()
 verified_date timestamp ()
 verified_comment varchar (255)
 hasEmailed BIT ()
 enabled BIT ()
 event_id int unsigned (10

样本问题:结果:事件#2的ID#1,时间60成员_结果:ID#1,result_id 1,成员ID 3,结果:事件#2的ID#2,时间60成员_结果:ID#2,结果ID,2,成员ID 3

我只想返回一行,其中任何一个result_id-当前的两行都是在最小时间相等的情况下返回的。

编辑:

您可以尝试使用MIN或MAX,具体取决于哪一个更吸引您使用ID,然后只有一行:

喜欢:

SELECT result_id FROM ( 
    SELECT member_id, MIN(member_result.id) as member_resultID ,MIN(time) AS mintime FROM result 
        JOIN member_result ON result.id = member_result.result_id 
        WHERE event_id = 2 
        GROUP BY member_id ORDER BY mintime ) 
AS x 
JOIN result ON result.time = x.mintime
JOIN member_result ON member_result.result_id = result.id
AND member_result.id = x.member_resultID

对于第一个用户,这仅返回给定事件的MIN时间。 (因此只有一行而不是两行)

这是一个SqlFiddle

SELECT Distinct result_id FROM ( 
SELECT member_id,MIN(time) AS mintime FROM result 
    JOIN member_result ON result.id = member_result.result_id 
    WHERE event_id = ? 
    GROUP BY member_id ) AS x 
JOIN result ON result.time = x.mintime
JOIN member_result ON member_result.result_id = result.id
AND member_result.member_id = x.member_id 

你尝试过这个吗?

实际上,这就像在外部查询上再次进行分组一样简单-最初由于在没有ORDER BY的情况下我就已经有了LIMIT语句,而由于基于GROUP BY的查询,在没有限制的情况下,最初似乎没有任何作用坏了。

SELECT result_id FROM ( 
SELECT member_id,MIN(time) AS mintime FROM result 
    JOIN member_result ON result.id = member_result.result_id 
    WHERE event_id = ? 
    GROUP BY member_id ORDER BY mintime ) AS x 
JOIN result ON result.time = x.mintime
JOIN member_result ON member_result.result_id = result.id
AND member_result.member_id = x.member_id
GROUP BY member_result.member_id

感谢所有贡献者!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM