SQLにおける算術演算
今日は、『実践Pythonによるデータベース入門』の第3章 "SQL―基本的な問い合わせ―" で学んだことをアプトプッとします。
算術演算
数値属性の列に対して、算術演算を含む問い合わせを行うことができます。下記のように演算結果の列にASを使って、「新しい列名」を付けて値を表示することができます。
SELECT 列の演算式 AS 新しい列名 FROM 表名 WHERE 条件式;
【例題3.5】以下の要求を実現し、それをMySQL上で実行し、動作確認せよ。
仕様要求
(1)以下の売上表を用いて、売上データベースを作成する。ただし、データベース名:salesbase、テーブル名:saleslistとする。
(2)品目別の売上金額を表示する。
(3)売上金額の合計を表示する。
(1)以下の売上表を用いて、売上データベースを作成する。ただし、データベース名:salesbase、テーブル名:saleslistとする。
mysql> CREATE DATABASE salesbase;
Query OK, 1 row affected (0.47 sec)
mysql> USE salesbase;
Database changed
mysql> CREATE TABLE saleslist(sid CHAR(10), goods CHAR(30), price INT, quantity INT);
Query OK, 0 rows affected (1.89 sec)
本書の解説では、sidを主キーを設定していました。
主キーの設定の書式については、本書ではこれまで説明がなく、唐突に登場してきた感が否めません。
本書に習い、主キーを設定することにします。
mysql> DROP TABLE saleslist;
Query OK, 0 rows affected (0.90 sec)
mysql> CREATE TABLE saleslist(sid CHAR(10), goods CHAR(30), price INT, quantity INT, PRIMARY KEY (sid));
Query OK, 0 rows affected (1.53 sec)
mysql> SHOW fields FROM saleslist;
+----------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| sid | char(10) | NO | PRI | NULL | |
| goods | char(30) | YES | | NULL | |
| price | int | YES | | NULL | |
| quantity | int | YES | | NULL | |
+----------+----------+------+-----+---------+-------+
4 rows in set (0.07 sec)
続いて、INSERT文でテーブルsaleslistにデータを挿入していきます
mysql> INSERT INTO saleslist VALUES ('T01', 'テレビ', 198000, 1);
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO saleslist VALUES ('T02', '冷蔵庫', 125000, 2);
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO saleslist VALUES ('T03', '洗濯機', 104000, 2);
Query OK, 1 row affected (0.10 sec)
mysql> INSERT INTO saleslist VALUES ('T04', '掃除機', 125000, 1);
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO saleslist VALUES ('T05', 'パソコン', 179800, 4);
Query OK, 1 row affected (0.09 sec)
mysql> INSERT INTO saleslist VALUES ('T06', 'カメラ', 59800, 3);
Query OK, 1 row affected (0.28 sec)
mysql> SELECT * FROM saleslist;
+-----+--------------+--------+----------+
| sid | goods | price | quantity |
+-----+--------------+--------+----------+
| T01 | テレビ | 198000 | 1 |
| T02 | 冷蔵庫 | 125000 | 2 |
| T03 | 洗濯機 | 104000 | 2 |
| T04 | 掃除機 | 125000 | 1 |
| T05 | パソコン | 179800 | 4 |
| T06 | カメラ | 59800 | 3 |
+-----+--------------+--------+----------+
6 rows in set (0.00 sec)
(2)品目別の売上金額を表示する。
mysql> SELECT sid, goods, price, quantity, price*quantity AS amount FROM saleslist;
+-----+--------------+--------+----------+--------+
| sid | goods | price | quantity | amount |
+-----+--------------+--------+----------+--------+
| T01 | テレビ | 198000 | 1 | 198000 |
| T02 | 冷蔵庫 | 125000 | 2 | 250000 |
| T03 | 洗濯機 | 104000 | 2 | 208000 |
| T04 | 掃除機 | 125000 | 1 | 125000 |
| T05 | パソコン | 179800 | 4 | 719200 |
| T06 | カメラ | 59800 | 3 | 179400 |
+-----+--------------+--------+----------+--------+
6 rows in set (0.00 sec)
(3)売上金額の合計を表示する。
mysql> SELECT SUM(price*quantity) AS total_amount FROM saleslist;
+--------------+
| total_amount |
+--------------+
| 1679600 |
+--------------+
1 row in set (0.00 sec)
総和(合計)を求めるには、集約関数を用いればよかったのでしたね。
グループ内の項目に対して、カウント、平均、総和などの集約関数を用いることができます。
いいなと思ったら応援しよう!
サポート、本当にありがとうございます。サポートしていただいた金額は、知的サイドハッスルとして取り組んでいる、個人研究の費用に充てさせていただきますね♪