skillup

技術ブログ

Database

MYSQL group_concat,cast等

投稿日:2017年2月20日 更新日:

実務でいろいろとトラブルがあり、データベースから在庫データを見てくれ~なんて依頼がありましたんでSQLをごりごり書いていたんですが、普段使わないようなSQLの構文を使ったのでここでちょっと紹介します。

group_concat

グルーピングした項目でグルーピングにならないデータを抽出する方法です。

テーブル名 product

id|category|product_name
1| a | りんご
2| a | みかん
3| a | かき
4| b | パソコン
5| b | スマホ

上記みたいなデータがあったとして、
a|りんご、みかん、かき
b|パソコン、スマホ

みたいな出し方をしたいときですね。この場合group_concatで下記のように書けばOKです。

これは汎用性が結構あるかとおもい、なぜ今までしらなかったんだろうと若干後悔しました。ちなみにつなげる項目のソートもできます。詳しくは下記参照

MySQLのgroup_concatで複数レコードを1行にまとめる

substring_index

文字列の分割でPHPのexplodeやperlのsplitにあたります。リンクのほうがわかりやすいのでそのまま張ります。

MySQL 関数リファレンス 区切り文字列N個目までの文字列を取り出す (SUBSTRING_INDEX)

cast

ソートをするときに使います。例えば1,2,11という文字があったとして、これを昇順にソートする場合、人間だと1 2 11と数値と判断して並べますが、文字だと1,11,2になってしまいます。これを防ぐために001,002とやるのが正しいのですが、そうでないときは無理数字に変換する必要があります。

その場合下記のように書けば数値になります。

sampleTableにcolという列があり、文字が入っているものを数値化したい場合、下記のように書けばOKです。

union

union自体は知っていたのですが、MySQLでfull outer joinが使えないときに使えると知りました。

これまたリンク先がよくできているので任せます(爆)

MySQLでの完全外部結合

【MySQL5.6】完全外部結合(FULL OUTER JOIN)のやりかた

 

 

-Database
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

SQL基礎 ウィンドウ関数

SQLの基礎(主にSELECT)を whereはレコードに対しての集計、havingはレコードの集合に対しての集計 ビューは一時的なselect文なのでサブクエリとほぼ等価 条件分岐で出力項目を変えた …

no image

netbeansのJPQL補助機能

JPAでは基本的に生のSQLではなく、JPQLを使って書きます。 SQLでもタイプミスにイライラさせられることは多いのですが、JPQLはもっとですね・・・爆 そこで使えるのがNetbeansの入力補助 …

no image

MySQLでの日付関数

MySQLでSUMやCOUNTなんかはよく使うと思うのですが、日付の関数なんかもかなり使います。 今回は、日付の日数をとりたいときの関数を紹介。 例えばあるカラムにある日付が入力されており、現在との日 …

no image

外部結合 応用編2

引き続き結合についてです。 Contents1 1対Nの結合に関して2 完全外部結合3 差集合(class_aだけに存在するものとclass_bだけに存在するもの)3.1 class_aのみ3.2 c …

no image

MySQLのユーザー変更+information_schema.columns

MySQLで行うユーザーの作成について

これですが、一つのデータベースに対して行うとhost内のユーザーすべてが切り替わってしまいます …