CENSUSの表では、州ごとにグループ化し、州ごとに郡の人口の中央値と郡の数を取得します。
Psql、redshift、snowflakeでは、これを行うことができます。
psql=> SELECT state, count(county), PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY "population2000") AS median FROM CENSUS GROUP BY state;
state | count | median
----------------------+-------+----------
Alabama | 67 | 36583
Alaska | 24 | 7296.5
Arizona | 15 | 116320
Arkansas | 75 | 20229
...
標準のBigQueryでこれを行うための素晴らしい方法を見つけようとしています。文書化されていないpercentile_cont
分析関数が利用可能であることに気づきましたが、私はそれを私が望むものにするためにいくつかの主要なハックをしなければなりません。
私が収集したものと同じ種類のことを正しい引数で行えるようにしたいのですが。
SELECT
state,
COUNT(county),
PERCENTILE_CONT(population2000,
0.5) OVER () AS `medPop`
FROM
CENSUS
GROUP BY
state;
しかし、このクエリはエラーを生成します
SELECT list expression references column population2000 which is neither grouped nor aggregated at
私はcan必要な答えを得ますが、これが私がやりたいことを行うための推奨される方法であるとしたら、とてもがっかりします。
SELECT
MAX(nCounties) AS nCounties,
state,
MAX(medPop) AS medPop
FROM (
SELECT
nCounties,
T1.state,
(PERCENTILE_CONT(population2000,
0.5) OVER (PARTITION BY T1.state)) AS `medPop`
FROM
census T1
LEFT OUTER JOIN (
SELECT
COUNT(county) AS `nCounties`,
state
FROM
census
GROUP BY
state) T2
ON
T1.state = T2.state) T3
GROUP BY
state
私がやりたいことをするためのより良い方法はありますか?また、PERCENTILE_CONT
関数はドキュメント化される予定ですか?
読んでくれてありがとう!
関心をお寄せいただきありがとうございます。 PERCENTILE_CONTは開発中であり、GAになるとドキュメントを公開します。最初に分析関数としてサポートし、後で集計関数(GROUP BYを許可)としてサポートする予定です。これら2つのリリースの間で、より簡単な回避策は
SELECT
state,
ANY_VALUE(nCounties) AS nCounties,
ANY_VALUE(medPop) AS medPop
FROM (
SELECT
state,
COUNT(county) OVER (PARTITION BY state) AS nCounties,
PERCENTILE_CONT(population2000,
0.5) OVER (PARTITION BY state) AS medPop
FROM
CENSUS)
GROUP BY
state