很难理解sql查询

sgtfey8w  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(310)

我遇到了这个问题,很难理解它的作用

  1. SELECT DISTINCT
  2. EMPLOYEE.EMPLOYEE_ID,
  3. EMPLOYEE.LAST_NAME,
  4. EMPLOYEE.FIRST_NAME,
  5. COUNT(*)
  6. FROM EMPLOYEE
  7. JOIN ENTRY ON EMPLOYEE.EMPLOYEE_ID = ENTRY.EMPLOYEE_ID
  8. JOIN TICKET ON ENTRY.TICKET_ID = TICKET.TICKET_ID
  9. WHERE ENTRY.ACTIVITY_ID = 'ADVTS' AND EMPLOYEE.DEPARTMENT_ID ='SLS'
  10. GROUP BY EMPLOYEE.EMPLOYEE_ID, EMPLOYEE.LAST_NAME,
  11. EMPLOYEE.FIRST_NAME,ENTRY.ENTRY_ID
  12. HAVING COUNT(ENTRY.ENTRY_ID) >=
  13. (SELECT CAST(1.25 * COUNT(ENTRY.ACTIVITY_ID)/COUNT(DISTINCT EMPLOYEE.EMPLOYEE_ID) AS float)
  14. FROM
  15. EMPLOYEE
  16. JOIN
  17. ENTRY ON EMPLOYEE.EMPLOYEE_ID = ENTRY.EMPLOYEE_ID
  18. WHERE
  19. ENTRY.ACTIVITY_ID = 'ADVTS' AND EMPLOYEE.DEPARTMENT_ID = 'SLS')

据我所知,它列出了 EMPLOYEE 是谁干的
ADVTS ACTIVITY 来自
DEPARTMENT SLS 这使得 ENTRY 这至少和平均分录一样多
DEPARTMENT SLS 为了 ADVTS 目的
感谢所有花时间帮忙的人
在注解后编辑成功结果:

  1. SELECT
  2. EMPLOYEE.EMPLOYEE_ID,
  3. EMPLOYEE.LAST_NAME,
  4. EMPLOYEE.FIRST_NAME
  5. FROM EMPLOYEE
  6. JOIN
  7. ENTRY ON ENTRY.EMPLOYEE_ID = EMPLOYEE.EMPLOYEE_ID
  8. GROUP
  9. BY EMPLOYEE.EMPLOYEE_ID, EMPLOYEE.LAST_NAME,
  10. EMPLOYEE.FIRST_NAME
  11. HAVING
  12. COUNT(ENTRY.ENTRY_ID) >=
  13. (SELECT
  14. CAST(1.25 *
  15. COUNT(ENTRY.ACTIVITY_ID)/COUNT(DISTINCT EMPLOYEE.EMPLOYEE_ID)AS float)
  16. FROM
  17. EMPLOYEE JOIN ENTRY ON EMPLOYEE.EMPLOYEE_ID = ENTRY.EMPLOYEE_ID
  18. WHERE
  19. ENTRY.ACTIVITY_ID = 'ADVTS' AND EMPLOYEE.DEPARTMENT_ID = 'SLS')

输出:

  1. EMPLOYEE_ID| LAST_NAME| FIRST_NAME
  2. 7 | Salesman | Efficient
vd8tlhqk

vd8tlhqk1#

假设 TICKET_ID 是独一无二的 Ticket 而且从来都不是 NULLENTRY ,然后你就可以摆脱它了 JOIN .
然后我假设查询的目的是返回计数大于总体平均值1.25的员工。这需要更多(合理的)假设,但更简单的表述是:

  1. SELECT e.*
  2. FROM (SELECT EM.EMPLOYEE_ID, EM.LAST_NAME, EM.FIRST_NAME, COUNT(*) AS CNT,
  3. SUM(COUNT(*)) OVER () * 1.0 / COUNT(*) OVER () as AVG_CNT
  4. FROM EMPLOYEE EM JOIN
  5. ENTRY EM
  6. ON EM.EMPLOYEE_ID = EN.EMPLOYEE_ID
  7. WHERE EN.ACTIVITY_ID = 'ADVTS' AND EM.DEPARTMENT_ID = 'SLS'
  8. GROUP BY EM.EMPLOYEE_ID, EM.LAST_NAME, EM.FIRST_NAME
  9. ) e
  10. WHERE cnt >= 1.25 * avg_cnt

相关问题