gpt4 book ai didi

mysql - SQL : How do I sum all null values into another value of specific row?

转载 作者:行者123 更新时间:2023-11-29 15:46:03 25 4
gpt4 key购买 nike

我使用的是Mysql。

我有 2 张 table :

  1. 表销售额:

    S_Id    DATE       Total_Price    Employee_Id
    1 1/02/2014 5636 10
    2 1/04/2014 148 999
    3 1/05/2014 101 30
    4 1/06/2014 959 40
    5 1/02/2014 3000 10
    6 1/04/2014 4992 13
    7 1/05/2014 472 11
    8 1/06/2014 8483 40
  2. 表员工:

    Employee_Id  First_Name    Last_Name    Address     City 
    10 brock li a1 berlin
    20 dan santiago a2 london
    30 alex brookmen a3 rome
    40 michael gold a4 amsterdam
    50 john bisping a5 barcelona
    999 tony oneale a6 munich
    • 员工表仅包含活跃员工
    • 但 Sales 表仍然包含所有销售额,包括非在职员工的销售额

我的问题:

  1. 我想列出 2015 年每名活跃员工销售额最高的前 4 名员工(按 Sales.Total_Price 总和)
  2. Employee_Id = 999 将包括他的销售额总和以及非在职员工的所有销售额总和。

    • Employee_Id = 999 是在职员工

因此结果应该是:

Employee_Id  First_Name    Last_Name    Address     City    total sales  
10 brock li a1 berlin 8636
20 dan santiago a2 london 8483
999 tony oneale a6 munich 5612
40 michael gold a4 amsterdam 959

因此,我尝试在员工销售表之间进行左连接,并在员工.Employee_Id = null 时对所有价格求和

我的代码:

SELECT s.employee_id
, e.first_name
, e.last_name
, e.address
, e.city
, CASE WHEN ISNULL(e.employee_id) OR e.employee_id = 999
THEN SUM(s.total_price)
ELSE SUM(s.total_price) END 'total sales'
FROM sales s
LEFT
JOIN employees e
ON s.employee_id = e.employee_id
WHERE YEAR(s.date) = 2015
GROUP
BY s.employee_id
, e.first_name
, e.last_name
ORDER
BY SUM(s.total_price) DESC
LIMIT 4

但没有成功:

  1. 它没有将所有空值(非在职员工)的销售额汇总到 Employee_Id = 999 的行中
  2. 当我只希望列表中包含活跃员工时,前 4 名销售中仍可能出现非活跃员工
  3. 此外,如果您知道一种更好的方法来计算每位员工最多 4 笔销售额的总和,这对我来说将是一个很好的学习

最佳答案

您必须首先对销售表中的所有详细信息求和,然后使用左连接。像下面这样的东西可能会帮助你 -

 SELECT E2.*, Total_Sales
FROM (SELECT emp.employee_id
,SUM(total_price) Total_Sales
FROM (SELECT CASE WHEN e.employee_id IS NULL OR e.employee_id = 999 THEN 999 ELSE s.employee_id END employee_id
, e.first_name
, e.last_name
, e.address
, e.city
, s.total_price
FROM Sales s
LEFT JOIN employees e ON s.employee_id = e.employee_id) emp
GROUP BY emp.employee_id) s2
JOIN employees E2 on s2.employee_id = E2.employee_id
ORDER BY s.total_sales DESC
LIMIT 4

这是 Db-Fiddle -

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=748fd944384d80e717c08b3a2057f5c6

关于mysql - SQL : How do I sum all null values into another value of specific row?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57026924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com