11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SQL -Tips集

Last updated at Posted at 2018-12-25

※本記事はSQLの入門を一通り勉強し終えた方向けとなります。

環境

Windows10 64bit
PostgreSQL 10.6

※環境はPostgresql/Redshiftを想定しているため、BigQuery 等では使用できないかもしれません。

知っていると役に立つかもしれない SQL - Tips集




## そうは言っても基本編

#####■SQLの評価順序

・FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY > LIMIT

#####■countでnullも含めて数を数えたいとき(通常、countのみだとnullの数はカウントされません)

SELECT
COUNT(*)
FROM
(SELECT  * FROM テーブル名 )as q 
WHERE 
カラム名 is null

#####■SQLでは、「NOT IN」はnullがあると使えない

#####■検索時に「__(アンダーバー)」で文字数を指定できる。(ex.「_ _ご」という綴りのものを検索したい)

SELECT
*
FROM
テーブル名
WHERE 
item LIKE '__ご'

#####■「ORDER BY カラム名 DESC」で高い順に並び替え

#####■「RANK() OVER (ORDER BY カラム名 DESC)」:上から順位をつける(順位を飛ばす)

#####■「DENSE_RANK() OVER (ORDER BY カラム名 DESC)」:上から順位をつける(順位を飛ばさない)

#####■「RANK() OVER(PARTITION BY グループ分けしたいカラム名 ORDER BY カラム名)」:グループ化したものを上から順位をつける(順位を飛ばす)

#####■感覚的に知っておきたいサブクエリの使用場所

-SELECT句でサブクエリを使う時=特定の列の集計を行ったり、集計関数を使ったり、一件だけ呼び出したいとき

-FROM句でサブクエリを使う時=名前を付けて改めてSELECT句で使いたい場合。テーブルをどんどん絞っていくとき、もしくはカラム名を作成し、そのコード内で使用したいとき

-WHERE句でサブクエリを使う時=検索条件を補完したい時や、他の更新可能性のあるテーブルを引っ張ってきたい時(=他所のテーブルに合わせて都度更新したくない時)、JOINが使えないとき



## チョイと便利なお役立ち構文編

#####■FIRST_VALUE(カラム名)OVER():ランキング最上位を抽出

#####■LAST_VALUE(カラム名)OVER():ランキング最下位を抽出

#####■ROWS BETWEEN 開始値 and 終了値:  内の条件で、連番を振る

-CURRENT ROW(現在の行)
-n RECEDING(n行前)
-n FOLLOWING(n行後)
-UNBOUNDED PRECEDING(前の行すべて)
-UNBOUNDED FOLLOWING(後の行すべて)

rows between unbounded preceding and current row

unbounded preceding = 「グループの最初の行をウィンドウの開始点とする」
current_row = 「ウィンドウの終了点を常にカレント行とする」

#####■動的疑似テーブル作成
-WITH 疑似テーブル名(疑似カラム名、疑似カラム名) as (
VALUES
('単語'、'単語')
('単語'、'単語')
('単語'、'単語')
) select * from 疑似テーブル名

#####■ROLLUP(カラム名1、カラム名2):カラム別(カテゴリ別)での小計を抽出




## チョイと便利な分析構文編

#####■ntile(数字):任意の間隔にグルーピング

ex.デシル分析にて:ntile(10) over(partition by カラム名 order by カラム名2 desc)・・・全体を10分割して各行に1~10の値をつける

#####■random() < 0.001 :ランダムサンプリング。「どの行でも良いからランダムに0.1%(=1000分の1)くらいの量が欲しい」

#####■var_pop(column)=columnの母分散

#####■var_samp(column)=columnの標本分散

#####■stddev_pop(column)=columnの#####標準偏差

#####■stddev_samp(column)=columnの標本標準偏差








Tipsというよりただの構文集になってしまった感は否めませんが、どこかでお役立て頂ければ幸いです。



■次回:ANALYZEコマンドの有用性について(予定)

11
5
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
11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?