获取与一个城市不同的员工订单数量

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 或像你一样。谢谢!

以上是关于获取与一个城市不同的员工订单数量的主要内容,如果未能解决你的问题,请参考以下文章

我怎样才能写出同月雇佣的员工和订单?

两个日期之间每天未结订单的 SQL 计数

ABAP采购订单如何取不同移动类型数量的值

微信统一下单需注意问题

加入发货后订单数量翻倍

无需curson或While循环即可通过减少库存数量来获取可以交付的订单状态