假设我有一个简单的表投票列
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 )
但是,它返回空集。如果我将min(count)替换为实际最小值,它可以正常工作。 我也试过
SELECT candidate,min(count)
FROM (SELECT candidate,count(*) AS count
FROM voting
where rank = 1
AND candidate < 200
group by candidate
order by count(*)
) AS temp
但这导致只有1行,我有3行具有相同的最小计数但具有不同的候选者。我想要所有这3行。
任何人都可以帮助我。具有相同最小计数(*)值的行数也会有所帮助。
示例相当大,所以我显示了一些虚拟值
1 $sampleToken1 101 1
2 $sampleToken2 102 1
3 $sampleToken3 103 1
4 $sampleToken4 102 1
这里,当根据候选分组时,有3行与count(*)结果组合
candidate count( * )
101 1
103 1
102 2
我希望显示前2行,即count(*)= 1或其他最小值
答案 0 :(得分:1)
尝试将此脚本用作模式 -
-- 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;
答案 1 :(得分:0)
完全删除您的HAVING关键字,但未正确编写。
并将SUB SELECT添加到where子句中以符合该条件。
(即选择cand,count(*)作为投票计数,其中rank = 1且count =(select .....)
答案 2 :(得分:0)
HAVING关键字无法以您尝试的方式使用MIN功能。将MIN函数替换为绝对值,例如HAVING count > 10