情弱エンジニアのなかのblog

一人前のエンジニアになる為のブログです

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        |
+----------+------------+--------------+

以下のサイトを参考にいたしました。

FORMAT:数値を整形する

【MySQL】GROUP BY句に複数のカラムを指定する方法 | WEBマスターの知恵ブログ

それでは