我想了解如何为以下内容编写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命令是什么?
答案 0 :(得分:-1)
试试这个
SELECT e.EmpNo, EmpName, EmpCommRate, count(*) AS 'Total Orders'
FROM Employee e, Orders o
WHERE e.EmpNo = o.EmpNo
AND EmpCommRate < 0.040
GROUP BY e.EmpNo, EmpName, EmpCommRate
答案 1 :(得分:-1)
您需要的是join和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