gpt4 book ai didi

mysql - 带有 GROUP BY 的 SQL MAX 得到错误的非分组字段

转载 作者:行者123 更新时间:2023-11-29 00:29:56 25 4
gpt4 key购买 nike

我正在尝试从按 spot_id 和 vote_type 分组的表中获取最大总行数,但我需要的另一个字段 (video_id) 不在该组中,所以我想这就是为什么它在结果中给出了错误的 video_id放。我的查询有什么问题?

查询:

SELECT 
max(total_votes) as total, spot_id, vote_type, video_id
FROM
(
SELECT
count(*) as total_votes, spot_id, video_id, vote_type
FROM
spot_video_votes
GROUP BY
spot_id, video_id, vote_type
) AS t
GROUP BY
spot_id, vote_type

子查询结果:

total_votes, spot_id, video_id, vote_type
'1','1','2','OWN'
'1','1','3','OWN'
'4','1','4','OWN' -- should pick this
'1','2','3','FAIL'
'2','2','3','OWN' -- this
'2','2','4','FAIL' -- and this
'1','2','4','OWN'

实际结果:

total, spot_id, video_id, vote_type
'4','1','2','OWN'
'2','2','3','FAIL'
'2','2','3','OWN'

预期结果:

total, spot_id, video_id, vote_type
'4','1','4','OWN'
'2','2','4','FAIL'
'2','2','3','OWN'

最佳答案

如果不按 video_id 字段分组,您会从相应的分组字段中收到一个仲裁值。

一个选项是将 max 查询的结果加入到自身中——像这样:

SELECT t1.total_votes as total, t1.spot_id, t1.vote_type, t1.video_id 
FROM
(
SELECT count(*) as total_votes, spot_id, video_id, vote_type
FROM spot_video_votes
GROUP BY spot_id, video_id, vote_type
) AS t1 JOIN
(
SELECT max(total_votes) as max_total_votes, spot_id, vote_type, video_id
FROM
(
SELECT count(*) as total_votes, spot_id, video_id, vote_type
FROM spot_video_votes
GROUP BY spot_id, video_id, vote_type
) AS t
GROUP BY spot_id, vote_type
) t2 ON t1.total_votes = t2.max_total_votes
AND t1.spot_id = t2.spot_id
AND t1.vote_type = t2.vote_type

关于mysql - 带有 GROUP BY 的 SQL MAX 得到错误的非分组字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17079051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com