我想要以下有关如何编写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