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

数据库查询需求:按规则统计readStatus并返回指定字段

解决方案

针对你的需求,我调整了SQL语句,解决了原查询只返回readStatus=false记录、未处理空requestType分组、以及同一CategoryGroup被拆分的问题,具体实现如下:

SELECT
    COALESCE(m.requestType, '') AS requestType,
    CASE
        WHEN COALESCE(m.requestType, '') = '' THEN 'BLANK'
        ELSE s.categoryGroup
    END AS categoryGroup,
    SUM(CASE WHEN m.readStatus = 0 THEN 1 ELSE 0 END) AS count
FROM mb_message m
JOIN mb_subcategory s ON m.subCategoryId = s.subCategoryId
WHERE m.storeId = ? 
  AND m.countryCode = ? 
  AND m.modifiedDate >= ?
GROUP BY
    COALESCE(m.requestType, ''),
    CASE
        WHEN COALESCE(m.requestType, '') = '' THEN 'BLANK'
        ELSE s.categoryGroup
    END
ORDER BY categoryGroup, requestType;

关键逻辑说明

  • 统一处理空requestType:用COALESCE(m.requestType, '')将NULL转为空字符串,把NULL和空值的requestType归为同一类,并将它们的categoryGroup强制设为'BLANK',满足你对空requestType分组的要求。
  • 完整统计(含全true的情况):用SUM(CASE WHEN m.readStatus = 0 THEN 1 ELSE 0 END)替代原查询的COUNT(),这样即使某个requestType+categoryGroup组合下没有未读(readStatus=0)的记录,也会返回0,而不是被过滤掉。
  • 正确分组CategoryGroup:按处理后的categoryGroup分组,而不是原查询的subCategoryId,这样subcategoryId 12和13这类属于同一CategoryGroup的记录会被合并到同一组,符合你的业务规则。
  • 保留原有过滤条件:保留了你原查询中的storeId、countryCode、modifiedDate过滤规则,确保统计范围符合要求。

如果需要展示所有存在的requestType(即使没有符合过滤条件的记录),可以先从mb_message表中提取所有去重的requestType,再左连接统计结果(前提是不需要关联subcategory的信息,或者subcategory有全量数据),示例如下:

WITH all_request_types AS (
    SELECT DISTINCT COALESCE(requestType, '') AS requestType
    FROM mb_message
)
SELECT
    art.requestType,
    CASE
        WHEN art.requestType = '' THEN 'BLANK'
        ELSE s.categoryGroup
    END AS categoryGroup,
    COALESCE(SUM(CASE WHEN m.readStatus = 0 THEN 1 ELSE 0 END), 0) AS count
FROM all_request_types art
LEFT JOIN mb_message m ON COALESCE(m.requestType, '') = art.requestType
LEFT JOIN mb_subcategory s ON m.subCategoryId = s.subCategoryId
WHERE m.storeId = ? 
  AND m.countryCode = ? 
  AND m.modifiedDate >= ?
GROUP BY
    art.requestType,
    CASE
        WHEN art.requestType = '' THEN 'BLANK'
        ELSE s.categoryGroup
    END
ORDER BY categoryGroup, art.requestType;

不过这个版本适用于需要展示所有历史存在的requestType的场景,你可以根据实际需求选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:01:25