我在查询时遇到问题,显示员工编号,名字,姓氏和每位员工的订单数量。确保订单数列名称应为“OrderCount”。按OrderCount排序,然后按员工ID排序。 Null是允许的。
employee_data包含以下列:Emp_ID
,F_Name
,L_Name
包含列的order_data:O_ID
,Emp_ID
,OrderNumber
这是我的疑问:
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
order_data
输出应为:
但它给了我错误的输入。
答案 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值。