COUNT()和Left Join无法正常工作

时间:2015-01-16 12:23:30

标签: mysql sql select group-by left-join

我在查询时遇到问题,显示员工编号,名字,姓氏和每位员工的订单数量。确保订单数列名称应为“OrderCount”。按OrderCount排序,然后按员工ID排序。 Null是允许的。

employee_data包含以下列:Emp_IDF_NameL_Name

包含列的order_data:O_IDEmp_IDOrderNumber

这是我的疑问:

Select order_data.Emp_ID, F_Name, L_Name, COUNT(employee_data.Emp_ID) as OrderCount
FROM order_data
LEFT JOIN employee_data
ON employee_data.Emp_ID = order_data.Emp_ID
GROUP BY order_data.Emp_ID
ORDER BY OrderCount

这些是我的表格:

employee_data enter image description here

order_data

enter image description here

输出应为:

enter image description here

但它给了我错误的输入。

enter image description here

6 个答案:

答案 0 :(得分:3)

聚合函数不能与查询中的其他字段一起使用。 您可以在子查询中使用它,如下所示:

Select order_data.Emp_ID, F_Name, L_Name, (select COUNT(employee_data.Emp_ID) from employee_data) as OrderCount
FROM order_data
LEFT JOIN employee_data
ON employee_data.Emp_ID = order_data.Emp_ID
GROUP BY order_data.Emp_ID
ORDER BY OrderCount

希望它有所帮助.. :)

答案 1 :(得分:2)

试试这个:

SELECT od.Emp_ID, ed.F_Name, ed.L_Name, COUNT(DISTINCT od.O_ID) AS OrderCount
FROM order_data od 
LEFT JOIN employee_data ed ON ed.Emp_ID = od.Emp_ID
GROUP BY od.Emp_ID
ORDER BY OrderCount

答案 2 :(得分:2)

替换您的查询

ORDER BY OrderCount

ORDER BY order_data.Emp_ID

你的问题解决了......

答案 3 :(得分:0)

我认为你的表格顺序错误:

Select ed.Emp_ID, ed.F_Name, ed.L_Name, COUNT(od.Emp_ID) as OrderCount
FROM employee_data ed LEFT JOIN
     order_data od
     ON ed.Emp_ID = od.Emp_ID
GROUP BY ed.Emp_ID
ORDER BY OrderCount;

据推测,您希望所有员工都有自己的员工。在维护得当的数据库中,您不应该在订单表上包含无效的员工ID。

答案 4 :(得分:0)

您必须声明group by子句中未在任何聚合函数中使用的列。尝试在group by子句中添加'order_data.Emp_ID,F_Name,L_Name'这些列。

答案 5 :(得分:0)

正如其他人所说,如果您不想拥有NULL值并且不想知道没有订单的员工,您可以使用加入...如果您需要非现有员工的订单(但是这可以工作),使用

SELECT
  od.Emp_ID, ed.F_Name, ed.L_Name, COUNT(od.Emp_ID) as OrderCount
FROM 
  order_data od
LEFT JOIN 
  employee_data ed ON ed.Emp_ID = od.Emp_ID
GROUP BY 
  od.Emp_ID
ORDER BY 
  OrderCount, od.Emp_ID 

你也错过了第二个ORDER BY值。