【问题标题】:Max and min both in a Group BYGroup BY 中的最大值和最小值
【发布时间】:2016-10-19 20:09:50
【问题描述】:

我有一个要求,我需要在 > 0 时提取最大数据,在

SELECT A.employee_id, paycheck_number
      max ( CASE 
           WHEN B.special = 'XXT' THEN B.AMOUNT
           ELSE 0 
         END ) AMOUNT, 
       max ( CASE 
           WHEN B.special = 'XXH' THEN B.hrs1
           ELSE 0 
         END ) HRS1
FROM   Table1 A, 
       table2 B 
       LEFT OUTER JOIN table3 C 
                    ON B.company = C.company 
WHERE  A .employee_id = '123456789' 
GROUP  BY A.employee_id, paycheck_number 
ORDER  BY 1 

返回:

EMPLOYEE_ID AMOUNT HRS1 paycheck_number 123456789 2799.82 134.84 1234 123456789 832.86 40 4321 123456789 0 0 5678

如果按数据删除组是:

EMPLOYEE_ID AMOUNT HRS1 paycheck_number 123456789 0 134.84 1234 123456789 2799.82 0 1234 123456789 0 40 4321 123456789 832.86 0 4321 123456789 0 -40 5678 123456789 -832.86 0 5678

而我想要:

EMPLOYEE_ID AMOUNT HRS1 paycheck_number 123456789 2799.82 134.84 1234 123456789 832.86 40 4321 123456789 -832.86 -40 5678

它看起来很简单,但是当我尝试时它不起作用。

【问题讨论】:

  • 你能发布一些示例输入数据吗..
  • @Teja:输入数据?
  • 你在这三个表中都有什么。
  • 请在您的问题中发布
  • @Developer 太好了,现在请从评论中复制它,将其添加到您的原始帖子中,以便对其进行格式化(然后您可以删除评论)。此类附加信息属于帖子,而不是评论。

标签: sql oracle oracle11g oracle10g


【解决方案1】:

在 Oracle 中,您可以通过 KEEP DENSE_RANK FIRST/LAST 获得最大绝对金额的值:

max(value) keep (dense_rank last order by abs(value))

但是,当一条记录中始终只有一个非零值而其他记录中的零或空值要考虑时,您可以简单地添加它们:

sum(value)

在只有一条记录实际包含值的情况下,您自己创建零条目,因此在要求最大值时得到 0 而不是 -40。删除创建干扰零的ELSE 分支,MAX 将为您提供正确的值。例如:

max(case when b.special = 'XXT' then b.amount end) as amount

【讨论】:

    猜你喜欢
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多