With子句和内部联接技巧

用户4441082

我正在使用Oracle。我有表名的作品看起来像:

Company-name   Employee-name   salary
   A1       Jim     122000
...

表2的管理外观(经理自行管理)

Employee-name  Manager-name
   Jim          John
   Kate         John
   John         John

我想以利润=收入总额的工资返回公司,其中收入=雇员的工资* 3(这里,只有雇员产生收入,而经理没有)。这是我的代码

with  Employee_count as(
Select a.company-name, b.employee-name as Guru
From works a
Inner join manages b
On a.employee-name=b.employee-name
Where b.employee-name<>b.manager-name
Group by a.company-name
)

Comput_revenue as (
select a2.company-name, SUM(3*a2.salary) as Revenue
from works a2
Inner join Employee_count b2
On a2.company-name=b2.company-name
Where a2.employee-name=b2.Guru
group by  a2.company-name),

select a3.company-name, b3.Revenue-SUM(a3.salary) as Profit
from works a3 inner join Comput_revenue b3
On a3.company-name=b3.company-name;

我在这里有两个问题:

(1)表名的别名是否在每个子句中都是本地的?我应该使用a,a2,a3还是只使用a和b都可以?

(2)如果正确,它看起来仍然太大。有任何简化的想法吗?

越前

我希望使用WITH子句不是强制性的,因为我为您找到了一个更简单的解决方案:

样本数据

作品

COMPANY EMPLOYEE_NAME SALARY 
A1吉姆122000 
A1凯特132000 
A1约翰88000 
A2杰克96000 
A2杰森134000 
A2珍妮特138000

管理

EMPLOYEE_NAME MANAGER_NAME 
Jim John 
Kate John John 
John John 
Jack Janet 
Jason Janet 
Janet Janet

的SQL

实现您的逻辑的查询是:

SELECT
      COMPANY,
      SUM(
          DECODE(EMPLOYEE_NAME, MANAGER_NAME, 0, SALARY * 3) - SALARY
      ) AS PROFIT
FROM WORKS
INNER JOIN MANAGES USING(EMPLOYEE_NAME)
GROUP BY COMPANY
ORDER BY 2 DESC;

结果

公司利润
A1 420000 
A2 322000

什么为什么

  1. 您说收入是薪水* 3,管理人员不计算在内。因此,如果当前行不是经理,则只需将薪金* 3添加到收入中。
  2. 由于利润是收入的来源,因此我们无条件地从所有收入行中减去薪水。
  3. 然后,我们将其按公司分组。

您的方法不错,但是您开始专注于使用CTE(WITH子句)功能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Where子句和内部联接语法查询

来自分类Dev

内部联接查询与内部联接..on和where子句查询之间的区别?

来自分类Dev

内部联接查询与内部联接..on和where子句查询之间的区别?

来自分类Dev

SQL内部联接的where子句

来自分类Dev

带where子句的内部联接

来自分类Dev

SQL Server:使用内部联接和where子句选择不同的记录

来自分类Dev

编写与使用内部联接和group by子句的sql select查询等效的java算法

来自分类Dev

Cakephp3,如何在cakephp3中使用where子句和内部联接?

来自分类Dev

将内部联接和where子句添加到INSERT INTO ON DUPLICATE KEY UPDATE

来自分类Dev

将not in子句更改为内部联接

来自分类Dev

MySQL-使用WHERE子句的内部联接

来自分类Dev

具有内部联接的SQLLite Where子句

来自分类Dev

JPQL内部联接和左联接

来自分类Dev

postgresql分组和内部联接

来自分类Dev

内部联接和查询优化

来自分类Dev

MYSQL查询和内部联接

来自分类Dev

SQL内部联接和多行

来自分类Dev

SQLite选择,联接和where子句问题

来自分类Dev

简单联接和子句花费的时间太长

来自分类Dev

使用where子句更新2个表的内部联接

来自分类Dev

Oracle,使用group by子句进行内部联接

来自分类Dev

将“或”应用于内部联接的where子句ActiveRecord

来自分类Dev

使用where子句更新2个表的内部联接

来自分类Dev

有效的内部联接请求中缺少from子句

来自分类Dev

大查询内部联接,带有“ like”子句

来自分类Dev

Fancybox的“标题”设置(外部/内部,null,顶部,...)+提示和技巧

来自分类Dev

JPA弹簧靴内部联接-带子句引用了两个不同的子句元素错误

来自分类Dev

为什么多重联接子句起作用时内部联接查询不起作用

来自分类Dev

内部联接vs自然联接vs USING子句:有什么优势吗?

Related 相关文章

  1. 1

    Where子句和内部联接语法查询

  2. 2

    内部联接查询与内部联接..on和where子句查询之间的区别?

  3. 3

    内部联接查询与内部联接..on和where子句查询之间的区别?

  4. 4

    SQL内部联接的where子句

  5. 5

    带where子句的内部联接

  6. 6

    SQL Server:使用内部联接和where子句选择不同的记录

  7. 7

    编写与使用内部联接和group by子句的sql select查询等效的java算法

  8. 8

    Cakephp3,如何在cakephp3中使用where子句和内部联接?

  9. 9

    将内部联接和where子句添加到INSERT INTO ON DUPLICATE KEY UPDATE

  10. 10

    将not in子句更改为内部联接

  11. 11

    MySQL-使用WHERE子句的内部联接

  12. 12

    具有内部联接的SQLLite Where子句

  13. 13

    JPQL内部联接和左联接

  14. 14

    postgresql分组和内部联接

  15. 15

    内部联接和查询优化

  16. 16

    MYSQL查询和内部联接

  17. 17

    SQL内部联接和多行

  18. 18

    SQLite选择,联接和where子句问题

  19. 19

    简单联接和子句花费的时间太长

  20. 20

    使用where子句更新2个表的内部联接

  21. 21

    Oracle,使用group by子句进行内部联接

  22. 22

    将“或”应用于内部联接的where子句ActiveRecord

  23. 23

    使用where子句更新2个表的内部联接

  24. 24

    有效的内部联接请求中缺少from子句

  25. 25

    大查询内部联接,带有“ like”子句

  26. 26

    Fancybox的“标题”设置(外部/内部,null,顶部,...)+提示和技巧

  27. 27

    JPA弹簧靴内部联接-带子句引用了两个不同的子句元素错误

  28. 28

    为什么多重联接子句起作用时内部联接查询不起作用

  29. 29

    内部联接vs自然联接vs USING子句:有什么优势吗?

热门标签

归档