繁体   English   中英

连接和别名表出现问题

[英]Trouble in join and alias table

我正在尝试解决一个问题,即特定部门的每个工人都出售产品并获利1000。 我想找出公司每个月的盈亏。 假设唯一的利润来自销售和成本是所有工人的薪水。

Table dept_worker
+-----------+---------+------------+------------+
| worker_id | dept_n  | from_date  | to_date    |
+-----------+---------+------------+------------+
|  10002    |  25     | 1996-08-03 | 9999-01-01 |
|  10016    |  25     | 1998-02-11 | 9999-01-01 |
|  10034    |  25     | 1995-04-12 | 1999-10-31 |
+-----------+---------+------------+------------+

Table salaries
+----------+--------+------------+------------+
| worker_id| salary | from_date  | to_date    |
+----------+--------+------------+------------+
|  10001   |  617   | 1986-04-26 | 1987-06-26 |
|  10002   |  600   | 1996-08-03 | 9999-01-01 |
|  10016   |  602   | 1998-02-11 | 9999-01-01 |
|  10034   |  674   | 1995-04-12 | 1999-10-31 |
|  10100   |  900   | 2000-07-25 | 2002-06-25 |
+----------+--------+------------+------------+

我尝试了两种不同的方法。 我尝试使用WHERE dept_n ='25',但结果并非预期,因为我正在过滤所有内容。

    SELECT MONTH(from_date) AS 'Months', COUNT(worker_id)*1000 AS 'Profit', 
    SUM (salary) AS 'Costs', (COUNT(worker_id)*1000-SUM(salary)) AS 'Diff'
    FROM dept_worker JOIN salaries using(from_date,worker_id)
    GROUP BY Month
    ORDER BY Diff DESC;

第二个(此查询不会给我任何结果):

    SELECT MONTH(from_date) AS 'Months', 
    (SELECT COUNT(worker_id)*1000 FROM dept_worker WHERE dept_n = '25') AS 'Profits', SUM(salary) 
    FROM dept_worker JOIN salaries using(from_date)
    GROUP BY Months;

预期结果:

+----------+--------+------------+-------------------+
| Months   | Profits| Costs      | Profits - Costs   |
+----------+--------+------------+-------------------+
|  1       | 4456   |14478       |-10022             |
|  2       | 4105   |14824       |-10719             |
|  3       | 4379   |16130       |-11751             |
|  4       | 4329   |15562       |-11233             |
| (...)    | (...)  |(...)       |(...)              |         
+----------+--------+------------+-------------------+

尝试从此开始:

   SELECT MONTH(from_date) AS 'Months', COUNT(worker_id) over(partition by dept_n order by dept_n) * 1000 AS 'Profit', 
    SUM (salary) over(partition by dept_n order by dept_n) AS 'Costs' 
    FROM dept_worker JOIN salaries using(from_date,worker_id)
    GROUP BY  MONTH(from_date)   

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM