[英]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.