S_a_k_Uの日記みたいなDB

~サクゥーと呼ばないで~

SELECT文のPARTITION BY句とORDER BY句のNULL

「分析関数」を使いこなしてない、ということに尽きるかorz

というよりOVER句から

全然知らんかったw
i am BEST : ウィンドウ関数をより「素直」に書き換えて理解しよう(1)(OVER 句のある集約関数)
GROUP BYで集約した、結果を行数文返すんか。

PARTITION BY句

i am BEST : ウィンドウ関数をより「素直」に書き換えて理解しよう(2)(OVER 句の PARTITION BY)
これである集合の平均との差を求めるとかできるんじゃな。
よくありがちなのは、ある集合の最大/最小のレコード抜いてくるような場面。
いつもサブクエリで最大/最小を求めてから、みたいな抽出してたorz
rankとdense_rank

ORDER BY句のNULL

イチからはじめる - SQL レファレンス 【ORDER BY】
NULLの順番って、最小?最大?どっちだったっけ?、と思ったらDBMSで違うんじゃなw
せめて、ORDER BYでの指定方法を統一して欲しいな…
「CASE WHEN …」がSQL92で標準っぽいので、その書き方で統一しときたい感じ。
CASE式のススメ(前編):CodeZine

Oracle

NULL の特性 - オラクル・Oracleをマスターするための基本と仕組み
Oracle 8.1.6 以上では、デフォルトの昇順ソートでは最後となる。
じゃぁOracle 8.1.6より前はどうなんだ???
ORDER BY句で指定する場合は、「NULLS FIRST」「NULLS LAST」で修飾する。

SQL Server

[SQLServer][SQL] Order by で NULLを最後に持ってくる | 大都会で働く新人SEの日記
デフォルトでは昇順ソートでは先頭となる。
上位のソートキーに「CASE WHEN [列名] IS NULL THEN 0 ELSE 1 END [ASC/DESC]」を追加する。
「CASE WHEN …」の0/1とASC/DESCで先頭か最後が決まる(「null」か「nullでない」で並び替えてから、値で並び替える)。

DB2

ORDER BYでNULLを最小に持ってくるには | Unofficial DB2 BLOG
デフォルトでは昇順ソートでは最後となる。
DB2のORDER BYでの指定方法は、SQL Serverと同じでソートキーに「CASE WHEN …」を追加する。

PostgreSQL

WEB開発備忘録 PostgreSQLでorderする際の、null値の扱い
デフォルトでは昇順ソートでは先頭となる。
ORDER BY句で指定する場合は、「[列名] IS NULL [ASC/DESC], [列名] [ASC/DESC]」でソートする。
上位のソートキーとして「IS NULL」でboolean値でソートしてると言う意味では、上位のソートキーに「CASE WHEN…」の記述に近い。

MySQL

MySQL の ORDER BY で NULL を先にもってきて NULL 以外は降順にする « をぶろぐ
デフォルトでは昇順ソートでは先頭となる。
ORDER BY句で指定する場合は、「[列名] IS NULL [ASC/DESC], [列名] [ASC/DESC]」でソートする。