You need to enable JavaScript to run this app. MySQL跨2017-2020同结构分表,统计满足stars=4的ID跨表出现次数的方法
优惠活动
大模型
产品
解决方案
定价
更多

MySQL跨2017-2020同结构分表,统计满足stars=4的ID跨表出现次数的方法

跨表统计需求实现方案

核心逻辑说明

之前的写法无法生效主要存在两个共性问题:

  • 纯数字命名的表名不能用单引号包裹,需使用反引号 ` 转义,否则MySQL会将单引号内容识别为字符串而非数据表对象,直接触发语法错误
  • 直接连表查询的逻辑会过滤掉仅在1张、2张表满足条件的id,无法覆盖全部统计范围,更适合采用先将各表符合过滤条件的记录合并、再分组计数的实现思路

可直接运行的参考SQL

SELECT
  id,
  COUNT(*) AS matched_table_count
FROM (
  -- 提取2017表中满足stars=4的id
  SELECT id FROM `2017` WHERE stars = 4
  UNION ALL
  -- 提取2018表中满足stars=4的id
  SELECT id FROM `2018` WHERE stars = 4
  UNION ALL
  -- 提取2019表中满足stars=4的id
  SELECT id FROM `2019` WHERE stars = 4
  UNION ALL
  -- 提取2020表中满足stars=4的id
  SELECT id FROM `2020` WHERE stars = 4
) AS matched_id_pool
GROUP BY id
-- 可选:按匹配表数量降序排列结果
ORDER BY matched_table_count DESC;

细节注意

  • 上述写法覆盖全部匹配场景:只要id在任意一张表中满足stars=4就会出现在结果中,对应matched_table_count就是该id符合条件的表数量,计数范围为1-4,完全匹配需求
  • 若单张表内同一个id可能存在多条stars=4的重复记录,需要在每个子查询中增加DISTINCT,修改为SELECT DISTINCT id FROM 对应表 WHERE stars =4,避免单表内的重复记录导致计数虚高
  • 合并多表记录时必须使用UNION ALL,不能用UNION:后者会对合并后的全量结果做去重,会打乱逐表计数的逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 08:36:03