LoginSignup
0
0

【BigQuery】GEOGRAPHY型でGroupByしたいときはANY_VALUE()が使える

Last updated at Posted at 2022-10-08

GEOGRAPHY型は集計列に指定できないので、ちょっと困ったことになることがあります。

検証用データ

例えばこんな風に、日付、位置、売上額が入ったデータを受け取って、そこから日毎の売上合計を算出したかったとします。

WITH salesAmount AS (
  SELECT *
  FROM
    UNNEST([
      STRUCT(DATE'2022-04-01' AS date, ST_GEOGPOINT(0, 0) AS point, 1000 AS amount),
      STRUCT('2022-04-01', ST_GEOGPOINT(0, 0), 500),
      STRUCT('2022-04-02', ST_GEOGPOINT(0, 1), 10000),
      STRUCT('2022-04-03', ST_GEOGPOINT(1, 1), 2000)
    ])
)

SELECT * FROM salesAmount

実行結果

date point amount
2022-04-01 POINT(0 0) 1000
2022-04-01 POINT(0 0) 500
2022-04-02 POINT(0 1) 10000
2022-04-03 POINT(1 1) 2000

日毎に売り場を変えるので、 point は日付ごとに一意になります。

GROUP BYを試す

ここで、 datepointGROUP BY しようとすると…

SELECT 
  date,
  point,
  SUM(amount) AS totalAmount
FROM salesAmount
GROUP BY date, point

こんなエラーメッセージが表示されます。

Grouping by expressions of type GEOGRAPHY is not allowed

GEOGRAPHY型の項目は GROUP BY に設定できないのだそう。

ANY_VALUE() が使える

こんな場合は、 ANY_VALUE() を使うのが便利です。

SELECT 
  date,
  ANY_VALUE(point) AS point,
  SUM(amount) AS totalAmount
FROM salesAmount
GROUP BY date

実行結果

date point totalAmount
2022-04-01 POINT(0 0) 1500
2022-04-02 POINT(0 1) 10000
2022-04-03 POINT(1 1) 200
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0