プログラマのためのSQL 読書会(25)に参加
28.4の計算列によるグルーピングからを読みました
- MySQLではGroup By句にASC,DSCが書ける(一同驚き)
- 安定ソート、非安定ソートは具体例がないとわかりにくい
- Order Byで指定すると安定ソートになる。
- Group By句では非安定ソート、安定ソートが保証されない
- InnoDBでは主キーに関して、安定ソートの動きになる
- Group By句では非安定ソート、安定ソートが保証されない
- Order Byで指定すると安定ソートになる。
- Order By句に列番号を各機能は20年以上前から非推奨?廃止予定らしい。
- その場限りのクエリを描くときは便利だから使う。
PostgreSQL,MySQLはorder by句に0がかけない。
- MySQLは0を指定するとエラー。-1を指定すると変な動きになる
- 正の整数以外を指定すると、基本的におかしな動きになる。
集約関数にDISTINCTが書ける。
- 数年前にこれを知って驚きました。知らない人はぜひ試して見ましょう。
SELECT COUNT(DISTINCT shohin_bunrui) FROM Shohin;
- デフォルトでALLが使われている。(明示することもできるが結果は変わらないので、意味はない)
countのなかにdistinct複数名が書けるか?
- 検証したところ、かけない
count以外の集約関数は引数がNULLの場合は空集合を返す
- countのみ0を返す。
- 小数点
近似値について話題になりました。 https://qiita.com/y-ken/items/b8601092d0261c3a556d http://d.hatena.ne.jp/hnw/20171221
計算誤差をきにするならdouble,floatではなくdecimal型を使うべき。
中央値をだす関数は標準SQLではない
そういえば統計詐欺といえば日本人の貯蓄ですよね。。。という話から以下のリンクが話題に上った。
- https://www.mitsui-seimei.co.jp/joyful/money/041/index.htm
- 平均貯蓄額は高いけど、中央値が0の層もあるね。
SQL ServerのTOPは色々指定できる。
- 上級者の方でも引数に与えられるのは数値しか知らなかったらしい。
難解なSQLの出典はなんなのか?
- 昔のCompuServeというニュースグループというものらしい
- https://ja.wikipedia.org/wiki/CompuServe
- 使い方のマニュアルが1万円もするらしい
- そんな時代もあったんだね。
次は29.4.3 複数の基準の極致関数から!