【问题标题】:In Oracle/SQL how to select rows where the value of the columns remained the same在 Oracle/SQL 中如何选择列的值保持不变的行
【发布时间】:2015-01-06 16:13:00
【问题描述】:

在 Oracle/SQL 中如何选择列值保持不变的行

我有一份预算清单,每个预算分布在 12 个月内,每个月都有固定工资。我想返回一份在 12 个月内工资值保持不变的预算列表。

BUDGET MONTH SALARY
5468 1              1500
5468 2              1500
5468 3              1500
5468 4              1500
5468 5              1500
5468 6              1500
5468 7              1500
5468 8              1500
5468 9              1500
5468 10             1500
5468 11             1500
5468 12             1500

3456 1              1675
3456 2              1675
3456 3              1675
3456 4              1675
3456 5              1500
3456 6              1500
3456 7              1500
3456 8              1500
3456 9              1675
3456 10             1675
3456 11             1675
3456 12             1675

3948 1              2900
3948 2              2900
3948 3              2900
3948 4              2900
3948 5              2900
3948 6              2900
3948 7              2900
3948 8              2900
3948 9              2900
3948 10             2900
3948 11             2900
3948 12             2900

9756 1              2900
9756 2              2900
9756 3              2900
9756 4              2900
9756 5              2900
9756 6              2900
9756 7              2900
9756 8              2900
9756 9              2900
9756 10             2900
9756 11             2900
9756 12             2900

9712 1              2743
9712 2              2900
9712 3              2900
9712 4              2900
9712 5              2743
9712 6              2900
9712 7              2743
9712 8              2900
9712 9              2900
9712 10             2743
9712 11             2900

5394 1              1500
5394 2              1500
5394 3              1500
5394 4              1500
5394 5              1500
5394 6              1500
5394 7              1500
5394 8              1500
5394 9              1500
5394 10             1500
5394 11             1500
5394 12             1500

【问题讨论】:

    标签: sql oracle oracle11g oracle10g


    【解决方案1】:

    计算每个预算的distinct 工资

    select budget
    from your_table
    group by budget
    having count(distinct salary) = 1
    

    【讨论】:

      【解决方案2】:
      SELECT BUDGET,SALARY FROM BUDTGET_TAB
      HAVING COUNT(MONTH)=12
      GROUP BY BUDGET,SALARY
      ORDER BY 1,2
      

      【讨论】:

      • 如果月份较少(假设 8 个仅用于一些预算)并且工资在那个月之前保持不变并且不能说它是否会保留,我已经按照上面给出的答案发布了这个答案其余月份相同,因此结果可能在此处失败,并且在上述问题中,要求在一年中(12 个月)为预算找到相同的薪水。
      • 请按照我的实际做法说明投反对票的原因,然后回答。
      【解决方案3】:
      SELECT BUDGET,SALARY FROM BUDTGET_TAB
      GROUP BY BUDGET,SALARY
      HAVING COUNT(MONTH)=12
      ORDER BY 1,2;
      

      我刚刚重新安排了 Dharmesh 编写的查询...

      【讨论】:

      • 是的,可以通过在 group by 之前或 group by 之后编写来选择两种方式,会产生相同的结果...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-29
      • 1970-01-01
      • 2018-12-11
      相关资源
      最近更新 更多