簡體   English   中英

當在Oracle中應用group by子句時,如何獲取不同的非聚合列以及聚合列?

[英]how to get distinct non-aggregated columns along with aggregated column when group by clause is applied in oracle?

select sum(col1), distinct col2 from table group by col1;

以上查詢失敗。 如果組中的所有值都是唯一的,是否還有獲取獨特價值的替代方法?

對於ex 1(如果col2中的值相同):

|col1 | col2 |
|-----|------|
|1    |  2   |
|1    |  2   |

輸出應為:

|col1(sum) |col2 |
|----------|-----|
|    2     |  2  |

例2(如果col2中的值不同):

|col1 | col2 |
|-----|------|
|1    |  2   |
|1    |  3   |

輸出應為:

|col1(sum) | col2 |
|----------|------|
|    2     |'...' |

GROUP BY col1

如果只有一個不同的col2值(對於該col1組),則有一個case表達式返回col2。否則,返回-999(或您選擇的任何其他值)。

select sum(col1),
       case when count(distinct col2) = 1 then max(col2)
            else -999
       end
from t
group by col1

DISTINCT不是應用於單個列的操作-它適用於所有列,並且在聚合的上下文中沒有意義。

輸出應為:

 col1(sum) col2 2 '...' 

您可以使用case語句獲取所需的輸出,但是您需要使case語句的所有輸出具有相同的數據類型。 因此,如果您想...當有多個值時,則需要將數字轉換為字符串:

SELECT SUM( col1 ),
       CASE
       WHEN COUNT( DISTINCT col2 ) = 1
       THEN TO_CHAR( MAX( col2 ) )
       ELSE '...'
       END
FROM   your_table
GROUP BY col1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM