簡體   English   中英

計算組內的百分比

[英]Calculating percentage within a group

給出一個表格,用於以下命令:

select sex, count(*) from my_table group by sex;
select sex, employed, count(*) from my_table group by sex, employed;

得到:

  sex  | count 
-------+------
male   | 1960 
female | 1801

和:

 sex     | employed | count 
---------+----------+-------
 male    | f        |  1523 
 male    | t        |   437 
 female  | f        |  1491 
 female  | t        |   310 

我在編寫查詢時遇到困難,該查詢將計算每個性別組中的就業百分比。 所以輸出應該如下所示:

 sex     | employed | count  | percent
---------+----------+--------+-----------
 male    | f        |  1523  | 77.7% (1523/1960)
 male    | t        |   437  | 22.3% (437/1960)
 female  | f        |  1491  | 82.8% (1491/1801)
 female  | t        |   310  | 17.2% (310/1801)

可能為時已晚,但對於即將到來的搜索者,可能的解決方案可能是:

select sex, employed, COUNT(*) / CAST( SUM(count(*)) over (partition by sex) as float)
  from my_table
 group by sex, employed

通過IO統計,這似乎是最有效的解決方案 - 可能取決於要查詢的行數 - 在上面的數字上測試...

同樣的態度可用於獲得男/女比例:

select sex, COUNT(*) / CAST( SUM(count(*)) over () as float)
  from my_table
 group by sex

此致,Jan

您可以使用子選擇和連接來執行此操作:

SELECT t1.sex, employed, count(*) AS `count`, count(*) / t2.total AS percent
  FROM my_table AS t1
  JOIN (
    SELECT sex, count(*) AS total 
      FROM my_table
      GROUP BY sex
  ) AS t2
  ON t1.sex = t2.sex
  GROUP BY t1.sex, employed;

我無法想到其他方法。

暫無
暫無

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

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