表格是:
Table1
Agent_Id Name
1 Vijay
2 Rajesh
3 Satish
4 Anji
Table2
Case_Id Stage Login_Time Logout_time Agent_id Status
101 Maker 10:20 10:30 2 Success
102 Maker 10:25 10:35 1 Success
103 Maker 10:40 10:50 2 Success
101 Checker 10:45 11:00 3 Success
101 Approver 11:15 11:30 2 Success
102 Checker 10:50 11:00 1 Reject
102 Maker 11:15 11:45 4 Reverify
103 Checker 11:30 11:40 2 Reject
我想获得处理更多申请的顶级代理名称。
我试过了:
SELECT Table1.Name, Table2.Status, count (*)
FROM Table1, Table2
LEFT JOIN Agent Table
ON Agent Table. Agent_Id = Case_transaction_details.Id
GROUP BY Table1.Name
第三张表从何而来?
此外,学习使用正确、明确、标准的JOIN
语法。 切勿在FROM
子句中使用逗号。
所以:
SELECT t1.Agent_id, t1.Name, COUNT(t2.Agent_id)
FROM Table1 t1 LEFT JOIN
Table2 t2
ON t2.Agent_Id = t1.Agent_Id AND
t2.Status = 'Success' -- I assume you want this
GROUP BY t1.Agent_id, t1.Name
ORDER BY COUNT(t2.Agent_id) DESC;
笔记:
- 这只计算"成功"状态,我猜你想要。 (如果没有,请删除该条件。
- 这将使用
LEFT JOIN
因此包括所有代理。 - 这包括聚合中的
Agent_id
,以防两个代理具有相同的名称。 - 您可以添加
FETCH FIRST
或LIMIT
或SELECT TOP
(取决于数据库(以将结果限制为特定大小。
如果是mysql,那么你可以像下面这样尝试
SELECT Table1.Name,Table1.Agent_Id, count (*) as cnt
FROM Table1
LEFT JOIN Table2
ON Table1.Agent_Id = Table2.Table1
GROUP BY Table1.Name,Table1.Agent_Id
order by cnt desc limit 1
如果不同的RDBMS语法将被更改,就像SQL服务器一样,你需要top
试试这个-(对于MSSQL(
SELECT TOP 1 T1.Agent_Id, T1.Name, COUNT(*)
FROM Table1 T1
INNER JOIN Table2 T2 ON T1.Agent_Id = T2.Agent_Id
WHERE T2.Status = 'Success'
GROUP BY T1.Agent_Id,T1.Name
ORDER BY COUNT(*) DESC
SELECT a.Name, COUNT(c.Agent_id) as Processed_Applications
FROM agent_name as a
LEFT JOIN
case_transaction_details as c ON
a.Agent_id= c.Agent_id
GROUP BY a.Name
ORDER BY COUNT(c.Agent_id) DESC;````