Redash使う時に、知らなかったSQLの書き方を学びました
概要
最近、redashでsqlを書く機会が多く、こんな書き方があったのかとsqlに関して勉強をしなおしているので、学んだことをここに書きます
目次
- Redashとは
- 月ごとにデータを表示させたい
- 週ごとにデータを表示させたい
- 日付指定をする方法
- having
- case when と or null
- データ連携
1. Redashとは
Redashは、SQLの分析結果をわかりやすく可視化し共有するオープンソースBIツールです。
簡単にいうなら、DBのデータやGoogleアナリティクスなどからデータを取得してきて、グラフなどに表示させてくれます
また、定期的に作成したクエリの実行や、slackへグラフの表示など色々と便利なツールです
https://redash.io/
2. 月ごとにデータを表示させたい
月ごとにユーザ数の推移を見たい時に使います
//月ごと
DATE_FORMAT(date,![スクリーンショット 2021-02-13 22.04.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472696/21b04bae-6761-9cb0-170e-dbf57368b5e2.png)
'%Y-%m')
//group by を使用して月ごとに分ける
group by DATE_FORMAT(date, '%Y-%m')
3. 週ごとにデータを表示させたい
月ではなくて、もっと細かく週で見たい時に使えます
//週ごと
DATE_FORMAT(consultation_date, '%Y-%U weeks')
//group by を使用して週ごとに分ける
group by week
4. 日付指定をする方法
月でも週でもなくて、その時に欲しい値が欲しいから、指定してデータを取得したい場合に使えます
WHERE
date >= "{{start_date}}"
AND date <= "{{end_date}}"
5. having
havingはgroup byと一緒に使用します
staff_idでわけて、さらに合計金額が1万円以上に該当する値のみ表示させています
group by staff_id
having sum(money) >= 10000
6. case when
と or null
例えば男女それぞれの人数を出したい時に使えます
select
case sex
when 'man' then '男性'
when 'woman' then '女性'
end as '性別',
count(sex) as '人数'
from members
where date >= "2021-02-01"
group by 性別
or null
を使用しても人数は出すことができます
select
count(sex = "man" or null) as 男性,
count(sex = "woman" or null) as 女性
from members
where registration_date >= "2021-02-01"
違い
case when
を使用した場合は、同じカラムに値が入っているのでpieチャートを作成することができるのですが、or null
では、違うカラムに値を出しているのでpieチャートの作成をしてくれないです
7. データ連携
このデータ連携はアナリティクスからデータを取得したい時にも活用できますし、1つのクエリでうまく取得ができない時や、gorup byで基準をそれぞれ分けたい時に2つのクエリを作って最終的には1つのグラフに表示させたい時などに活用できます
SELECT
a.name,
b.year
FROM query_111 a
LEFT JOIN query_112 b ON b.id = a.staff_id