skillup

技術ブログ

Database

MYSQL group_concat,cast等

投稿日:

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

group_concat

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

テーブル名 product

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

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

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

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

http://www.bunkei-programmer.net/entry/20120530/p1

substring_index

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

http://db.yulib.com/mysql/000049.html

cast

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

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

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

union

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

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

https://mistymagich.wordpress.com/2011/01/06/mysql%E3%81%A7%E3%81%AE%E5%AE%8C%E5%85%A8%E5%A4%96%E9%83%A8%E7%B5%90%E5%90%88/

http://qiita.com/rhap/items/191938b930b13ee3cc3b

 

 

-Database
-

執筆者:


comment

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

関連記事

no image

論理設計のアンチパターン その2

今回は論理設計のアンチパターンの続きです。 今までに比べると何も意図がないというものではなく、パフォーマンスを考えて設計されているようなものが多いです。 ただし、中には絶対に許されないタイプのものもあ …

no image

オプティマイザと実行計画

データベースがSQLを受け取って処理を実行する前には下記のような段階があります。 Contents1 パーサー2 オプティマイザ3 カタログマネージャー4 テーブルからデータの取得5 参考リンク パー …

no image

HAVING句について

本日はHAVINGについて。 かろうじて用法はしっており、たまに使うこともありますが、あまりしっかり理解しているとはいえない状況ですので、掘り下げてみようと思います。 WHEREとは違い、抽出した結果 …

no image

DBの構造について メモリとHDD

データベースについてまたまた学習中。 覚えておきたいポイントなど。 データを収めておくべき媒体では「記憶コスト(単位金額当たりの容量)」と「アクセス速度」の2つが重要なパラメータ メモリとHDDでは前 …

no image

正規化のデメリット

Contents1 正規化のデメリット2 本日のSQL 正規化のデメリット 正規化についていろいろ書いてきましたが、メリットもあればデメリットもあります。 メリットとしては データの不整合が起きにくい …