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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:04:24