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

如何使用SQL查询拥有最多邮件工单的CPZName及对应数量?

问题出在哪

你写的SQL有两个明显问题:

  • 不能直接嵌套使用MAX(SUM(...)),SQL不允许这种聚合函数套聚合的写法,而且你连GROUP BY都没加,根本没法按CPZ分组统计数据。
  • 没必要关联那么多表——你的Tickets表本身就有Type和CPZName字段,直接用这张表就能完成查询,多余的关联反而可能导致数据重复或查询效率低下。
正确写法

要实现“找出邮件工单最多的CPZ名称和对应数量”,得先按CPZ分组统计每个区域的邮件数,再筛选出数值最大的结果。以下是两种常用实现方式:

写法一:分组排序取TOP 1

适合大多数SQL数据库(MySQL、PostgreSQL用LIMIT 1,SQL Server替换为TOP 1):

SELECT CPZName, COUNT(*) AS EmailCount
FROM Tickets
WHERE Type = 'email'
GROUP BY CPZName
ORDER BY EmailCount DESC
LIMIT 1;

如果存在多个CPZ邮件数并列第一的情况,想要把这些区域都查出来,可改用子查询:

SELECT CPZName, EmailCount
FROM (
    SELECT CPZName, COUNT(*) AS EmailCount,
           MAX(COUNT(*)) OVER () AS MaxCount
    FROM Tickets
    WHERE Type = 'email'
    GROUP BY CPZName
) AS TempTable
WHERE EmailCount = MaxCount;

写法二:窗口函数排序筛选

这种方式更灵活,适合需要处理排名逻辑的场景:

SELECT CPZName, EmailCount
FROM (
    SELECT CPZName, COUNT(*) AS EmailCount,
           ROW_NUMBER() OVER (ORDER BY COUNT(*) DESC) AS RankNum
    FROM Tickets
    WHERE Type = 'email'
    GROUP BY CPZName
) AS RankedData
WHERE RankNum = 1;

要是想保留所有并列第一的记录,把ROW_NUMBER()换成RANK()即可。

特殊情况补充

如果你的Tickets表中Type字段存储的是关联ID(而非直接的'email'字符串),且CPZName存在于关联表ControlledParkingZones中,那才需要恢复必要的表关联,写法如下:

SELECT C.CPZName, COUNT(*) AS EmailCount
FROM Tickets T
JOIN Types Ty ON T.TypeID = Ty.TypeID
JOIN ControlledParkingZones C ON T.CPZCode = C.CPZCode
WHERE Ty.Type = 'email'
GROUP BY C.CPZName
ORDER BY EmailCount DESC
LIMIT 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 06:39:15