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

大規模Webサービス技術入門 DBの分散

前回に引き続き、大規模サービスを運用するときに必要になるMySQLの知識についてのまとめ Contents1 テーブル・SQL設計2 レプリケーション機能3 パーティショニング テーブル・SQL設計 …

no image

ロック(排他制御)について

ECなどでの開発の場合、当然在庫数によって購入できるか、いなかがかわってきますが、複数人で同時にアクセスする際、処理の整合性を見る必要がでてきますので、ロックのが概念が大事になってきます。 そこでロッ …

no image

集合としてのSQL

今まで何度かSQLが集合ということを扱ってきました。 今回はそれがよくわかる例を。 実務ではあまりないと思うのですが、集合をイメージしやすい例題として、2つのテーブルが全く同じケースを考えます。 下記 …

no image

checkboxでの値の管理

formにてcheckboxの値を一つのカラムにいれて管理する機会があったのですが、これ入力更新出会っても検索であっても処理がなかなか厄介です。特に検索の時ですね・・・ 要するに値の候補が1,2,3, …

no image

NOT EXISTSの利用2

今回もNOT EXISTSの利用です。 前回の問題にプラスアルファし、列が一緒でないと連続でも意味ない仕様にします。 例えば下記のようなテーブルがあるとします。 seat | row_id | sta …

アーカイブ