【发布时间】:2020-05-31 09:00:02
【问题描述】:
我遇到了这个查询,很难理解它的作用
SELECT DISTINCT
EMPLOYEE.EMPLOYEE_ID,
EMPLOYEE.LAST_NAME,
EMPLOYEE.FIRST_NAME,
COUNT(*)
FROM EMPLOYEE
JOIN ENTRY ON EMPLOYEE.EMPLOYEE_ID = ENTRY.EMPLOYEE_ID
JOIN TICKET ON ENTRY.TICKET_ID = TICKET.TICKET_ID
WHERE ENTRY.ACTIVITY_ID = 'ADVTS' AND EMPLOYEE.DEPARTMENT_ID ='SLS'
GROUP BY EMPLOYEE.EMPLOYEE_ID, EMPLOYEE.LAST_NAME,
EMPLOYEE.FIRST_NAME,ENTRY.ENTRY_ID
HAVING COUNT(ENTRY.ENTRY_ID) >=
(SELECT CAST(1.25 * COUNT(ENTRY.ACTIVITY_ID)/COUNT(DISTINCT EMPLOYEE.EMPLOYEE_ID) AS float)
FROM
EMPLOYEE
JOIN
ENTRY ON EMPLOYEE.EMPLOYEE_ID = ENTRY.EMPLOYEE_ID
WHERE
ENTRY.ACTIVITY_ID = 'ADVTS' AND EMPLOYEE.DEPARTMENT_ID = 'SLS')
据我了解,它列出了完成 ADVTS ACTIVITY 和来自 DEPARTMENT SLS 的 EMPLOYEEs 的列表,这使得 ENTRYs 至少与 @ 中的平均条目一样多987654328@ SLS 用于ADVTS 目的
感谢任何花时间提供帮助的人
在cmets之后编辑成功结果:
SELECT
EMPLOYEE.EMPLOYEE_ID,
EMPLOYEE.LAST_NAME,
EMPLOYEE.FIRST_NAME
FROM EMPLOYEE
JOIN
ENTRY ON ENTRY.EMPLOYEE_ID = EMPLOYEE.EMPLOYEE_ID
GROUP
BY EMPLOYEE.EMPLOYEE_ID, EMPLOYEE.LAST_NAME,
EMPLOYEE.FIRST_NAME
HAVING
COUNT(ENTRY.ENTRY_ID) >=
(SELECT
CAST(1.25 *
COUNT(ENTRY.ACTIVITY_ID)/COUNT(DISTINCT EMPLOYEE.EMPLOYEE_ID)AS float)
FROM
EMPLOYEE JOIN ENTRY ON EMPLOYEE.EMPLOYEE_ID = ENTRY.EMPLOYEE_ID
WHERE
ENTRY.ACTIVITY_ID = 'ADVTS' AND EMPLOYEE.DEPARTMENT_ID = 'SLS')
输出:
EMPLOYEE_ID| LAST_NAME| FIRST_NAME
7 | Salesman | Efficient
【问题讨论】:
-
不要尝试。每当您看到一个同时包含
SELECT DISTINCT和聚合函数的查询时,您都可以有理由相信它是胡言乱语。 -
@Strawberry 可以给出一些理由吗?
-
我认为查询应该按照您的建议进行。除了 ENTRY.ENTRY_ID 不应该在 GROUP BY 我猜。它需要所有活动超过平均水平 25% 的员工。
-
是的@Wouter 我刚刚意识到这一点。另外我认为没有必要加入
TICKET
标签: sql sql-server sql-server-2019