使用Select Distinct输出

时间:2016-03-06 16:15:07

标签: mysql mysql-workbench

我想了解如何为以下内容编写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命令是什么?

2 个答案:

答案 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