Mysql 选择具有最小计数(*)的行
假设我有一个简单的带列投票表Mysql 选择具有最小计数(*)的行,mysql,Mysql,假设我有一个简单的带列投票表 id(primaryKey),token(int),candidate(int),rank(int). 我想提取所有具有特定排名的行,按候选行分组,最重要的是只提取最小计数(*)。 到目前为止,我已达到 SELECT candidate, count( * ) AS count FROM voting WHERE rank =1 AND candidate <200 GROUP BY candidate HAVING count = min( count )
id(primaryKey),token(int),candidate(int),rank(int).
我想提取所有具有特定排名的行,按候选行分组,最重要的是只提取最小计数(*)。
到目前为止,我已达到
SELECT candidate, count( * ) AS count
FROM voting
WHERE rank =1
AND candidate <200
GROUP BY candidate
HAVING count = min( count )
这里,当根据候选项分组时,有3行与计数(*)结果相结合
candidate count( * )
101 1
103 1
102 2
我希望显示前2行,即计数(*)等于1或最小值完全删除HAVING关键字,因为它没有正确写入 并在where子句中添加子SELECT以符合该条件
(即,选择cand,count(*)作为投票中的count,其中rank=1,count=(select…)HAVING关键字不能以您尝试的方式使用MIN函数。请将MIN函数替换为绝对值,例如
HAVING count>10
尝试使用此脚本作为模式-
-- find minimum count
SELECT MIN(cnt) INTO @min FROM (SELECT COUNT(*) cnt FROM voting GROUP BY candidate) t;
-- show records with minimum count
SELECT * FROM voting t1
JOIN (SELECT id FROM voting GROUP BY candidate HAVING COUNT(*) = @min) t2
ON t1.candidate = t2.candidate;
请显示一些示例输入数据和所需的输出。当我使用SUB-select时,它显示“where子句中的未知列计数”。这是我不想要的。我不知道绝对值。我只知道它是什么的最小值。你能先获得该值,然后将其应用于HAVING关键字吗?最小计数(*)当按候选人分组时。是的@Devart刚刚提出了同样的建议。我之前不知道如何在两个查询之间存储变量是的,他的解决方案看起来最适合这个场景。谢谢……我现在可以通过@min variable来做这件事了。(我不知道我们可以在mysql中创建这些类型的变量,持续多次查询)PS-我认为在您的第二个查询中不需要使用JOIN,它也不是按候选人分组
candidate count( * )
101 1
103 1
102 2
-- find minimum count
SELECT MIN(cnt) INTO @min FROM (SELECT COUNT(*) cnt FROM voting GROUP BY candidate) t;
-- show records with minimum count
SELECT * FROM voting t1
JOIN (SELECT id FROM voting GROUP BY candidate HAVING COUNT(*) = @min) t2
ON t1.candidate = t2.candidate;