You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

tinyint列特定值统计结果异常:如何正确统计正负投票数

问题分析与解决

你的统计结果异常是因为使用了COUNT(DISTINCT vote = 1),这个写法的核心问题在于:

  • vote = 1是布尔表达式,在MySQL中会返回1(条件成立)或0(条件不成立)
  • COUNT(DISTINCT ...)会对表达式的结果去重,不管有多少条符合条件的记录,去重后仅会保留1和0两个值,最终统计结果自然为2,和实际需要统计的数量完全不符。

正确的统计写法

方法1:用SUM()直接统计符合条件的行数

SELECT  
     SUM(vote = 1) AS like_count,
     SUM(vote = -1) AS dislike_count
FROM vote_table;

原理:当vote = 1条件成立时返回1,不成立时返回0,SUM会将所有符合条件的1累加,最终得到的就是目标记录的总数量。

方法2:CASE语句配合COUNT()

SELECT  
     COUNT(CASE WHEN vote = 1 THEN 1 END) AS like_count,
     COUNT(CASE WHEN vote = -1 THEN 1 END) AS dislike_count
FROM vote_table;

原理:CASE仅在条件满足时返回1,否则返回NULL;而COUNT()不会统计NULL值,因此能精准得到符合条件的记录数。

方法3:分组统计(按需选择)

如果需要同时查看各类别的具体数量,也可以用GROUP BY:

SELECT 
     vote,
     COUNT(*) AS count
FROM vote_table
WHERE vote IN (1, -1)
GROUP BY vote;

内容的提问来源于stack exchange,提问作者Toniq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 00:14:59