MySQLで大きい数値の表示とGROUP BYで複数指定の方法
MySQLを使っていて覚えた技術を記載いたします。
1.表示する数値を3桁でカンマ区切りにする
総売上など、ある程度大きい数値を出力するSQLを作った際に、そのまま表示すると見にくくなります。
SELECT total_sales as '総売上' 総売上 10000000
表示する数値を3桁でカンマ区切りに表示する方法を調べました。 使うのはFORMATです。FORMATを使うだけで3桁区切りになります。 小数点以下がなければ第二引数は0にしましょう。
SELECT FORMAT(total_sales , 0) AS '総売上' 総売上 10,000,000
2.GROUP BYを2つ使う ○○ごとで○○ごとのデータを出したいとき
年別で都道府県ごとの売上を表示するSQL文を作ることになったとします。
まず以下のようなテーブルがあると仮定します。
customersテーブル 顧客名 都道府県ID +---+-------+--------------+ |id |name |prefecture_id | +---+-------+--------------+ |1 |tanaka | 1 | |2 |yamada | 2 | +---+-------+--------------+ prefecturesテーブル +---+-------+ |id |name | +---+-------+ |1 |北海道 | |2 |青森 | +---+-------+ ordersテーブル 顧客id 注文日 合計金額 +---+------------+--------------+-------------+ |id |customer_id |order_date |total_amount | +---+------------+--------------+-------------+ |1 | 2 |2016-05-02 | 10000 | |2 | 1 |2017-08-24 | 2000 | +---+------------+--------------+-------------+
では方法ですが、 GROUP BYに複数のフィールドを指定することができます。GROUP BYの後にフィールドをカンマ区切りで記載します。 例: [GROUP BY hoge , fuga]
実際に書くと以下のようになります。
SELECT DATE_FORMAT(orders.order_date,'%Y') AS '注文日_年', prefectures.name AS '都道府県', sum(orders.total_amount) AS '売上' FROM orders INNER JOIN customers ON orders.customer_id = customers.id INNER JOIN prefectures ON customers.prefecture_id = prefectures.id GROUP BY --年ごとなのでorder_dateをフォーマットしています DATE_FORMAT(orders.order_date,'%Y'), prefectures.id
結果は以下のようになります。
+----------+------------+--------------+ |注文年 |都道府県 |売上 | +----------+------------+--------------+ |2016 | 北海道 | 10000 | |2016 | 青森 | 20000 | | ~ | |2016 | 沖縄 | 8000 | |2017 | 北海道 | 30000 | |2017 | 青森 | 25000 | | ~ | |2017 | 沖縄 | 12000 | +----------+------------+--------------+
以下のサイトを参考にいたしました。
【MySQL】GROUP BY句に複数のカラムを指定する方法 | WEBマスターの知恵ブログ
それでは