17

データセットで GROUP BY と COUNT(*) を実行していますが、合計に対する各グループの割合を計算したいと考えています。

たとえば、このクエリでは、各州の count( ) が合計に占める割合を知りたいと考えています ( publicdata:samples.natality から count( ) を選択します)。

SELECT state, count(*)
FROM [publicdata:samples.natality]
GROUP by state

SQL でそれを行う方法はいくつかありますが、Bigquery でそれを行う方法を見つけられませんでした。誰か知っていますか?

ありがとう!

4

4 に答える 4

16

最近発表されたウィンドウ関数の 1 つである ratio_to_report を確認します。

SELECT state, ratio * 100 AS percent FROM (
 SELECT state, count(*) AS total, RATIO_TO_REPORT(total) OVER() AS ratio
 FROM [publicdata:samples.natality]
 GROUP by state
)

state   percent
AL      1.4201828131159113   
AK      0.23521048665998198  
AZ      1.3332896746620975   
AR      0.7709591206172346   
CA      10.008298605982642
于 2013-06-11T15:57:16.390 に答える
4

ダミー値をキーとして使用して、合計に対して自己結合を行うことができます。例えば:

SELECT
  t1.state AS state,
  t1.cnt AS cnt,
  100 * t1.cnt / t2.total as percent
FROM (
  SELECT
    state,
    COUNT(*) AS cnt,
    1 AS key
  FROM
    [publicdata:samples.natality]
  WHERE state is not null
  GROUP BY
    state) AS t1
JOIN (
  SELECT
    COUNT(*) AS total,
    1 AS key
  FROM
    [publicdata:samples.natality]) AS t2
ON t1.key = t2.key
ORDER BY percent DESC
于 2013-06-05T20:15:47.380 に答える