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