如何从给定的两个表中获取处理更多应用程序的顶级代理名称



表格是:

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 FIRSTLIMITSELECT 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;````

最新更新