0

次のようなもの: SQL グループごとに既存の列の数に基づいて新しい列の値を作成する方法は?

しかし、私は 2 つ以上の異なる値を持っています。私は変数n個の個別の値を持っているので、私が持っている多くの異なるカウントがあることを常に知っているわけではありません.

そして、元のテーブルでは、「3」、「4」などの各行にカウントが必要です。つまり、「3」を含むすべての行は同じカウントになり、「4」を含むすべての行は同数など。

編集:また、異なる日付、つまり「2017-07-19」で個別の値ごとにカウントを分割するにはどうすればよいですか?

edit2:これが私がやった方法ですが、今は別の日付に分割する必要があります。

edit3:これは、日付で分割する方法です。

#standardSQL
SELECT * FROM
(SELECT * FROM table1) main
LEFT JOIN (SELECT event_date, value, COUNT(value) AS count 
FROM table1
GROUP BY event_date, value) sub ON main.value=sub.value 
AND sub.event_date=SAFE_CAST(main.event_time AS DATE)

edit4: PARTITION BY がどこかでより適切に文書化されていることを望みます。BigQuery や詳細なドキュメントについて広く書かれているものはないようです

#standardSQL
SELECT
  *,
  COUNT(*) OVER (PARTITION BY event_date, value) AS cnt
FROM table1;
4

1 に答える 1

2

あなたが与えるクエリは、ウィンドウ関数を使用して書く方が良いでしょう:

SELECT t1.*, COUNT(*) OVER (PARTITION BY value) as cnt
FROM table1 t1;

これがあなたの質問に答えているかどうかはわかりません。

同様にカウントしたい別の列がある場合は、条件付き集計を使用できます。

SELECT t1.*,
       COUNT(*) OVER (PARTITION BY value) as cnt,
       SUM(CASE WHEN datecol = '2017-07-19' THEN 1 ELSE 0 END) OVER (PARTITION BY value) as cnt_20170719
FROM table1 t1;
于 2017-07-19T18:51:28.483 に答える