具有MIN COUNT的MYSQL DB SELECT [重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了具有MIN COUNT的MYSQL DB SELECT [重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我有一个数据集作为一个表,它看起来像这样:
###################################
UID |TID |MID |RESULT |
1 |1 |1 |1 |
2 |1 |1 |2 |
3 |1 |1 |3 |
4 |2 |1 |4 |
5 |2 |1 |5 |
6 |2 |1 |6 |
1 |1 |2 |6 |
2 |1 |2 |5 |
3 |1 |2 |4 |
4 |2 |2 |3 |
5 |2 |2 |2 |
6 |2 |2 |1 |
1 |1 |3 |2 |
2 |1 |3 |4 |
3 |1 |3 |6 |
4 |2 |3 |5 |
5 |2 |3 |3 |
6 |2 |3 |1 |
我现在希望每行的最小量,按TID和MID分组
如果我做这样的事情:
SELECT UID, TID, MID, RESULT
FROM matches
WHERE matches.id = '$ID'
ORDER BY TID, MID, RESULT
我以正确的方式订购了东西。像这样:
###################################
UID |TID |MID |RESULT |
1 |1 |1 |1 |
2 |1 |1 |2 |
3 |1 |1 |3 |
3 |1 |2 |4 |
2 |1 |2 |5 |
1 |1 |2 |6 |
1 |1 |3 |2 |
2 |1 |3 |4 |
3 |1 |3 |6 |
4 |2 |1 |4 |
5 |2 |1 |5 |
6 |2 |1 |6 |
6 |2 |2 |1 |
5 |2 |2 |2 |
4 |2 |2 |3 |
6 |2 |3 |1 |
5 |2 |3 |3 |
4 |2 |3 |5 |
我现在只想拥有每个块的第一行。计算每个块中每个UID最佳的频率。
我不知道如何在没有在php中做很多循环的情况下获得它。如果我使用GROUP BY TID,MID和MIN(RESULT)它会随机接缝,UID即将出现。
解:
SELECT COUNT(*) AS AMOUNT, t1.UID AS UID, t1.TID AS TID, t1.MID AS MID, t1.RESULT AS result
FROM
(
SELECT um.user_id AS UID, um.team_id AS TID, um.match_id AS MID, um.q_result AS RESULT
FROM user_matches um JOIN league_matches lm
WHERE um.match_id = lm.id
AND lm.league_subseason_id = '135'
ORDER BY TID, MID
) t1
INNER JOIN
(
SELECT um.user_id AS UID, um.team_id AS TID, um.match_id AS MID, min(um.q_result) AS min_result
FROM user_matches um JOIN league_matches lm
WHERE um.match_id = lm.id
AND lm.league_subseason_id = '135'
GROUP BY TID, MID
) t2 ON t2.TID = t1.TID AND t2.MID = t1.MID AND t2.min_result = t1.result
GROUP BY t1.UID ORDER BY AMOUNT DESC
答案
您可以将子查询与TID和MID的min for column结果组一起使用
SELECT UID, TID, MID, RESULT
FROM matches m
inner join (
select TID, MID, min(result) min_result
from matches
group by TID, MID
) t on t.TID = m.TID and t.MID = m.MID and t.min_result = m.result
查看你的代码和示例你在subselect中有一个错误的user_id,你没有分组但是顺序所以我认为你应该这样改变你的代码
SELECT COUNT(*) AS AMOUNT, t1.UID AS UID, t1.TID AS TID, t1.MID AS MID, t1.RESULT AS result
FROM
(
SELECT um.user_id AS UID, um.team_id AS TID, um.match_id AS MID, um.q_result AS RESULT
FROM user_matches um JOIN league_matches lm
WHERE um.match_id = lm.id
AND lm.league_subseason_id = '135'
ORDER BY TID, MID
) t1
INNER JOIN
(
SELECT um.user_id AS UID, um.team_id AS TID, um.match_id AS MID, min(um.q_result) AS min_result
FROM user_matches um JOIN league_matches lm
WHERE um.match_id = lm.id
AND lm.league_subseason_id = '135'
GROUP BY TID, MID
) t2 ON t2.TID = t1.TID AND t2.MID = t1.MID AND t2.min_result = t1.result
GROUP BY t1.UID ORDER BY AMOUNT DESC
以上是关于具有MIN COUNT的MYSQL DB SELECT [重复]的主要内容,如果未能解决你的问题,请参考以下文章
count(*)count和count(column)区别以及执行效率高低比较
mysql之count,max,min,sum,avg,celing,floor