我想要以下有关如何编写SQL的指导?

可以说我有下表:

Employee
EmpNo | EmpName | EmpCommRate
1 | John  | 0.020
2 | Lewis | 0.040
3 | Bobby | 0.030
4 | Pete  | 0.050

Orders
OrdNo | EmpNo
101 | 1
102 | 1
103 | 4
104 | 2
105 | 3
106 | 3
107 | 1


对于佣金小于0.040的每位员工,请计算已收到的订单数。结果应包括员工编号,员工姓名,员工佣金率以及该员工接受的订单总数。假定订单中每个不同的OrdNo都算作一个不同的订单。每个员工只能显示一次;例如,如果员工米奇接受了五份订单,那么应该只有一行显示他的名字,而不是五行。

输出应为:

EmoNo | EmpName | EmpCommRate | Total Orders
1 | John  | 0.020 | 3
3 | Bobby | 0.030 | 2


输出以上内容的最佳SQL命令是什么?

最佳答案

您需要的是联接和group by子句,如下所示:

SELECT t.empNo,t.empName,t.empCommRate,count(distinct s.ordNo) as Total
FROM Employee t
INNER JOIN Orders s
 ON(t.empNo = s.empNo)
WHERE t.empCommRate < 0.040
GROUP BY t.empNo,t.empName,t.empCommRate


也可以通过如下相关查询来完成:

SELECT t.empNo,t.empName,t.empCommRate,
       (select count(distinct s.ordNo) from orders s
        where s.empno = t.empno) as Total
FROM Employee t
WHERE t.empCommRate < 0.040

10-04 15:37