MySQL按item_id合并行并统计Sick值数量的查询求助
解决MySQL分组统计特定meta_value数量的问题
我来帮你搞定这个MySQL查询问题!不能改表结构的前提下,要按item_id分组、统计"Sick"的数量、忽略"Vacation"还得按数量排序,咱们直接上可行的方案:
核心查询语句
SELECT item_id, COUNT(CASE WHEN meta_value = 'Sick' THEN 1 END) AS sick_count, GROUP_CONCAT(DISTINCT meta_value SEPARATOR ', ') AS merged_meta_values FROM your_table_name -- 记得把这里换成你的实际表名 WHERE meta_value != 'Vacation' -- 先把Vacation的记录排除掉 GROUP BY item_id ORDER BY sick_count DESC;
语句拆解说明
- WHERE过滤:先筛掉所有
meta_value为"Vacation"的记录,避免它干扰后续统计和合并结果。 - COUNT(CASE...)统计:这是实现需求的关键——只有当
meta_value等于"Sick"时,才返回1,否则返回NULL;而COUNT函数会自动忽略NULL值,这样就精准统计出了每个item_id对应的"Sick"次数。你也可以换成SUM(CASE WHEN meta_value = 'Sick' THEN 1 ELSE 0 END),效果完全一致。 - GROUP_CONCAT合并:用来把每个
item_id对应的所有有效meta_value合并成字符串,要是你不需要合并后的结果,直接删掉这一行就行。 - 分组与排序:按
item_id完成分组后,再按统计出的sick_count降序排列,让数量多的结果排在前面。
额外适配提示
如果你的表中meta_value存在大小写不一致的情况(比如出现"sick"或"SICK"),可以把判断条件改成大小写不敏感的形式,避免漏统计:
COUNT(CASE WHEN LOWER(meta_value) = 'sick' THEN 1 END) AS sick_count
这样应该就能完美满足你的需求啦!
内容的提问来源于stack exchange,提问作者bjoernbear
相关产品推荐
相关产品推荐

