2

データ分析に宝データを使用しており、presto db のユニオンステートメントに問題があります。

プレストでユニオンオールを行うにはどうすればよいですか. ドキュメントがわかりません。UNION を実行しようとするたびに、次のようにします。

SELECT 
  COUNT(*) AS ReservationsCreated,
  resource
FROM
  reservation
WHERE
  type = 'create'
UNION
SELECT 
  COUNT(*) AS ReservationsDeleted,
  resource
FROM
  reservation
WHERE
  type = 'delete'
GROUP BY
  resource
;

出力は次のように再フォーマットされます。

SELECT 
  COUNT(*) AS ReservationsCreated,
  resource
FROM
  reservation
WHERE
  type = 'create'
UNION
SELECT 
COUNT(*) AS ReservationsDeleted,
resource
FROM
reservation
WHERE
type = 'delete'
GROUP BY
resource
;

と言うエラー:

'"resource"' must be an aggregate expression or appear in GROUP BY clause

Presto の構文を理解していないと思います。ドキュメントはユニオンで非常に混乱しています。どんな助けでも感謝します。

4

1 に答える 1

7

group byエラーが示すように、クエリの最初の部分に a がありません。

 SELECT COUNT(*) AS ReservationsCreated, resource
 FROM reservation
 WHERE type = 'create'
 group by resource
 UNION ALL
 SELECT COUNT(*) AS ReservationsDeleted, resource
 FROM reservation
 WHERE type = 'delete'
 GROUP BY resource

実際、クエリは条件付き集計を使用するように単純化できます。

select 
 resource
,sum(case when type = 'create' then 1 else 0 end) as reservationscreated
,sum(case when type = 'delete' then 1 else 0 end) as reservationsdeleted
from reservation
group by resource
于 2015-11-11T21:25:23.977 に答える