Redash使う時に、知らなかったSQLの書き方を学びました


Redash使う時に、知らなかったSQLの書き方を学びました

概要

最近、redashでsqlを書く機会が多く、こんな書き方があったのかとsqlに関して勉強をしなおしているので、学んだことをここに書きます

目次

  1. Redashとは
  2. 月ごとにデータを表示させたい
  3. 週ごとにデータを表示させたい
  4. 日付指定をする方法
  5. having
  6. case when と or null
  7. データ連携

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 whenor 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