获取与一个城市不同的员工订单数量
Posted
技术标签:
【中文标题】获取与一个城市不同的员工订单数量【英文标题】:Get order count of employees, which have different count than in one city 【发布时间】:2020-04-08 12:44:35 【问题描述】:SQL 学习进展顺利。现在在需要帮助的地方进行练习。
我想获取订单数与纽约员工不同的员工的姓名。
表格:
ORDERS
,其中包括EMPLOYEE_ID, CITY, ORDER_ID
EMPLOYEES
,其中包括LAST_NAME, FIRST_NAME, EMPLOYEE_ID, CITY
我一直陷入这种情况:
SELECT ROW_NUMBER() OVER ( ORDER BY COUNT(T.ORDER_ID) DESC) ROW,
(H.LAST_NAME + ', ' + H.FIRST_NAME) 'Employee name',
COUNT(T.ORDER_ID) 'Sold orders', H.CITY 'City'
FROM ORDERS T JOIN EMPLOYEE H ON T.EMPLOYEE_ID = H.EMPLOYEE_ID
GROUP BY H.EMPLOYEE_ID, H.LAST_NAME, H.FIRST_NAME, H.CITY
这样我就可以获得员工已售出的订单。不幸的是,它没有显示有 0 个订单的员工。
如何显示订单数为 0 的员工?以及如何显示订单数量与一个城市的员工不同的员工?具有与纽约员工不同的订单计数的示例员工。
我希望你明白我的意思。问题复杂,语言障碍小。
示例数据:
First_name Last_name Sold_orders City
John Doe 2 New York
Jane Doe 5 Los Angeles
Peter Pan 5 Miami
我希望获得订单数量与迈阿密员工不同的员工。
First_name Last_name Sold_orders City
John Doe 2 New York
所以 Jane doe 和 Peter Pan 走了,因为他们的订单数量与迈阿密的员工数量相同(包括迈阿密本身)。
【问题讨论】:
1.编辑问题添加一些示例数据和所需的结果会有所帮助。 2. 标记您正在使用的 DBMS。 @Yougesh Sharma 感谢您的提示!我看不到我正在使用的 DBMS。这是学校版本,所有信息都隐藏了。我将做结果示例。 【参考方案1】:我认为你只想要一个left join
。为此,您需要从employee
表开始,然后带上orders
。
select
row_number() over ( order by count(o.order_id) desc) rn,
e.last_name + ', ' + e.first_name employee_name,
count(o.order_id) sold_orders,
e.city
from employee e
left join orders o on o.employee_id = e.employee_id
group by e.employee_id, e.last_name, e.first_name, e.city
请注意,我还更改了列别名:您应该避免使用单引号。尽管某些数据库允许这样做,但单引号通常用于字符串文字而不是标识符。数据库使用不同的符号来引用标识符(Oracle 和 Postgres 有双引号,mysql 有反引号,SQL Server 有方括号)。我更改了查询,使其使用不需要引号的标识符。
【讨论】:
谢谢,现在它也显示零订单。我将如何获得与指定城市的员工不同订单数的员工?并感谢单引号的提示。将来我会使用AS
或像你一样。谢谢!以上是关于获取与一个城市不同的员工订单数量的主要内容,如果未能解决你的问题,请参考以下文章