Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 选择具有最小计数(*)的行_Mysql - Fatal编程技术网

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;