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

SQL实现:查询每个客户下提交工单最多的前2名人员及错误修正

问题解决:获取每个客户工单提交量前2的人员

原始SQL的错误分析

  • count()语法错误:count函数必须传入参数,比如count(*)(统计所有行)或count(TicketNo)(统计非空的工单编号)
  • 分组字段错误:表中不存在CUSTOMER_NAME字段,正确字段是Customer;同时SELECT子句包含Customer和Person,GROUP BY必须同时包含这两个字段,否则不符合SQL分组规则

正确SQL实现

我们可以使用窗口函数对每个客户下的人员工单数量进行排名,筛选出排名前2的记录:

方法1:严格取前2(并列仅保留一条)

使用ROW_NUMBER(),即使有人员工单数量并列,也只会按顺序保留一条:

WITH TicketCounts AS (
    SELECT 
        Customer,
        Person,
        COUNT(TicketNo) AS TicketCount,
        ROW_NUMBER() OVER (PARTITION BY Customer ORDER BY COUNT(TicketNo) DESC) AS Rank
    FROM Tickets
    GROUP BY Customer, Person
)
SELECT Customer, Person, TicketCount
FROM TicketCounts
WHERE Rank <= 2;

方法2:保留并列排名的所有记录

使用RANK(),如果有多个人员工单数量并列且排名在前2范围内,会全部返回:

WITH TicketCounts AS (
    SELECT 
        Customer,
        Person,
        COUNT(TicketNo) AS TicketCount,
        RANK() OVER (PARTITION BY Customer ORDER BY COUNT(TicketNo) DESC) AS Rank
    FROM Tickets
    GROUP BY Customer, Person
)
SELECT Customer, Person, TicketCount
FROM TicketCounts
WHERE Rank <= 2;

测试结果

针对提供的测试数据,执行后会得到:

CustomerPersonTicketCount
JoeTradingBob2
JoeTradingGemma2
SmallShopJimmy2
BigSuppliesJane5

注:SmallShop和BigSupplies仅有一名提交人员,因此仅返回对应记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 14:47:20