簡體   English   中英

SQL:獲取列中的所有值,而不使用“ case when”

[英]SQL: Get all values in column without using “case when”

key |  num 
--------------
 A  |  2.6
 A  |  3.1
 B  |  2.5
 C  |  2.7

假設我有一個如上所示的表,並且我希望采用值A的key觀察值的百分比。我可以使用以下case when語句來做到這一點:

sum(case when key = 'A' then 1.0 else 0 end)/count(*) as A_pct

但是,如果我有很多key值,那么我將不得不編寫許多case when語句。 有沒有更簡單的方法可以做到這一點?

請嘗試以下腳本。 這將返回所有不同鍵的百分比。

SELECT 
Key,
(COUNT(*)/(SELECT COUNT(*) FROM your_table)*1.00)*100.00 
FROM your_table
GROUP BY Key

如果不需要百分比,那么只需將其作為示例代碼即可

SELECT 
Key,
COUNT(*)/(SELECT COUNT(*) FROM your_table)*1.00
FROM your_table
GROUP BY Key

如果聚合足以將值放在單獨的行而不是列中,則可以使用聚合:

select key, count(*), count(*) * 1.0 / sum(count(*)) over () as ratio
from t
group by key;

* 1.0只是因為我不確定SparkSQL是否執行整數除法。 如果要使用0到100之間的值,請使用* 100.0

暫無
暫無

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

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