You need to enable JavaScript to run this app. 给定字符串列表如何查询MySQL表中各元素统计数含不存在项0值
优惠活动
大模型
产品
解决方案
定价
更多

给定字符串列表如何查询MySQL表中各元素统计数含不存在项0值

问题原因

你原来的查询拿不到计数为0的bbb条目,本质是WHERE name IN ('aaa','bbb','ccc')只会筛选出业务表中已存在的匹配行,不存在的bbb根本不会进入后续分组统计的环节,自然没有对应的结果。
要实现需求单条SQL完全可以做到,核心思路是先构造包含所有待查询名称的临时结果集,再和业务表左关联后统计。

实现方案

假设你的业务表名为score_table(注意table是MySQL关键字,不要直接用作表名,替换成你实际的表名即可)。

1. MySQL 8.0+ 版本(简洁写法)

支持VALUES行构造器,可以快速生成临时结果集:

SELECT
  t.target_name AS `name`,
  COUNT(s.`name`) AS `count`
FROM
  (VALUES ROW('aaa'), ROW('bbb'), ROW('ccc')) AS t(target_name)
LEFT JOIN `score_table` s
  ON t.target_name = s.`name`
GROUP BY t.target_name;

2. MySQL 5.x 低版本兼容写法

用UNION ALL手动构造临时结果集:

SELECT
  t.target_name AS `name`,
  COUNT(s.`name`) AS `count`
FROM
  (
    SELECT 'aaa' AS target_name
    UNION ALL SELECT 'bbb'
    UNION ALL SELECT 'ccc'
  ) AS t
LEFT JOIN `score_table` s
  ON t.target_name = s.`name`
GROUP BY t.target_name;

注意点

统计时要用COUNT(s.name)而不是COUNT(*):左关联后无匹配的行对应的s.name为NULL,COUNT会自动忽略NULL值,刚好得到计数0;如果用COUNT(*)会把左关联生成的空行也计入,得到错误结果1。
如果待查询的列表很长,也可以先把所有待查询名称批量插入到一张临时表中,再用临时表替换上面的t子查询做关联统计,写法会更简洁。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 18:06:04