🐈

PrestoSQLのAggregate Functionsを試す-1

2020/12/18に公開

以下Presto公式ドキュメントのAggregate Functionsをいくつか試します
https://prestodb.io/docs/current/functions/aggregate.html

下記記事にて作成したgapminderテーブルをAthenaで操作する
https://zenn.dev/yassh_i/articles/bbdab0f80fdfd8

arbitary(x)

列xの任意の値を返す関数

SELECT
  arbitrary(continent)
FROM
  gapminder
> Asia

Asia以外という指定がなければEuropeとなる

SELECT
  arbitrary(continent)
FROM
  gapminder
WHERE continent != 'Asia'
> Europe

array_agg(x)

インプットxを配列にする関数

SELECT
  array_agg(continent)
FROM
  gapminder
> [Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Europe, Europe, Europe, .....

```sql
SELECT
  array_agg(DISTINCT continent)
FROM
  gapminder
> [Americas, Asia, Africa, Oceania, Europe]

avg(x)

xに列名を入れればその列の平均を、time interval rangeをいれれば、その期間の平均を出す

SELECT
  FLOOR(avg(gdppercap)) AS "GDPperCapの平均"
FROM
  gapminder
> 7215.0

bool_and(boolean) bool_or(boolean)

boolの演算用関数

SELECT
  DISTINCT continent,
  bool_and(continent = 'Asia')
FROM
  gapminder
GROUP BY year,continent
LIMIT 30

max_by(x,y), min_by(x,y)

y列が最大値のx列の値を返すらしい

SELECT
  max_by(pop,gdppercap)
FROM
  gapminder
> 212846

以下のSQLで、gdppercapを降順に並べた一番上のpopを確認できた

SELECT
  pop,
  gdppercap
FROM
  gapminder
ORDER BY gdppercap DESC
LIMIT 1
> 212846

max_by(x,y,n), min_by(x,y,n)

第三引数nを加えて、個数を指定することが可能(第三引数がなければひとつ)

SELECT
  max_by(pop,gdppercap,2)
FROM
  gapminder
> [212846, 841934]

先ほどのSQLのLIMITを2とすることで答え合わせが可能

SELECT
  pop,
  gdppercap
FROM
  gapminder
ORDER BY gdppercap DESC
LIMIT 2

ただのmax,min関数も、第二引数nを与えることで、上位n個を表現可能

次回はreduce_aggから再開します!

Discussion