SQLの割り算についてまとめています。


SQLの割り算の演算子は、「/」
SQLの割り算は、「/」を使います。/演算子で返される実際の値は、1 番目の式を 2 番目の式で除算して得られる商になります。以下は、MySQLでの実行例です。
- mysql> select 3/2;
- +--------+
- | 3/2 |
- +--------+
- | 1.5000 |
- +--------+
- 1 row in set (0.00 sec)
- mysql> select 2/3;
- +--------+
- | 2/3 |
- +--------+
- | 0.6667 |
- +--------+
- 1 row in set (0.00 sec)
- mysql> select 9/3;
- +--------+
- | 9/3 |
- +--------+
- | 3.0000 |
- +--------+
- 1 row in set (0.00 sec)
selectで取得したカラムに対して、割り算を適用してみましょう。以下は、employees(社員)テーブルと、salaries(年収)テーブルをjoinして、社員番号(emp_no)、姓名の姓(first_name)、姓名の名(last_name)、平均月収(salary/12)を取得した例です。
- mysql> select employees.emp_no, first_name, last_name, salary/12
- from employees
- left join salaries
- on employees.emp_no = salaries.emp_no and salaries.to_date='9999/01/01' limit 10;
- +--------+------------+-----------+-----------+
- | emp_no | first_name | last_name | salary/12 |
- +--------+------------+-----------+-----------+
- | 10001 | xGeorgi | Facello | 7413.1667 |
- | 10002 | Bezalel | Simmel | 6043.9167 |
- | 10003 | Parto | Bamford | 3609.2500 |
- | 10004 | Chirstian | Koblick | 6171.4167 |
- | 10005 | Kyoichi | Maliniak | 7891.0000 |
- | 10006 | Anneke | Preusig | 4979.5833 |
- | 10007 | Tzvetan | Zielinski | 7339.1667 |
- | 10009 | Sumant | Peac | 7867.4167 |
- | 10010 | Duangkaew | Piveteau | 6693.6667 |
- +--------+------------+-----------+-----------+
【関連記事】
▶SQLのSELECT句で計算してみよう!算術演算子を使った加工処理とは!
SQLの割り算での剰余の求め方
SQLで割り算の余り(剰余)を求めるには、modもしくは、%を使います。以下は、MySQLの例です。
- mysql> select 9 mod 2;
- +---------+
- | 9 mod 2 |
- +---------+
- | 1 |
- +---------+
- 1 row in set (0.00 sec)
- mysql> select 10 mod 2;
- +----------+
- | 10 mod 2 |
- +----------+
- | 0 |
- +----------+
- 1 row in set (0.00 sec)
- mysql> select 9 % 2;
- +-------+
- | 9 % 2 |
- +-------+
- | 1 |
- +-------+
- 1 row in set (0.00 sec)
なお、Oracleでは%演算子は使えません。剰余を求める場合は、modを使用します。
modはMySQL、Oracle、SQL Server、PostgreSQLなど主要なDBMSで使用可能なので、流用等を考えると、剰余はmodを使ったほうが良いでしょう。
SQLの割り算 SQL Serverでの整数同士での除算に注意
Microsoft SQL Serverの仕様です。整数同士の除算をおこなうと、結果が整数になります。
関連)(除算) (Transact-SQL) – SQL Server | Microsoft Docs
整数型の Aを整数型の B で除算すると、結果は小数部が切り捨てられた整数になるんですね。
- select 6/4;
- -----
- 1
上記の場合、6/4=1.5になるはずですが、SQL Serverでは小数部が切り捨てられて1になってしまいます。
なお、もともとデータ型がfloat型のカラムを整数で割り算しても、上記の問題は起こりません。以下は、SaleQuotaというカラムを12で割り算した例です。
- -- Uses AdventureWorks
- SELECT s.BusinessEntityID AS SalesPersonID, FirstName, LastName, SalesQuota, SalesQuota/12 AS 'Sales Target Per Month'
- FROM Sales.SalesPerson AS s
- JOIN HumanResources.Employee AS e
- ON s.BusinessEntityID = e.BusinessEntityID
- JOIN Person.Person AS p
- ON e.BusinessEntityID = p.BusinessEntityID;
- SalesPersonID FirstName LastName SalesQuota Sales Target Per Month
- ------------- ------------ ----------------- ----------- ------------------
- 274 Stephen Jiang NULL NULL
- 275 Michael Blythe 300000.00 25000.00
- 276 Linda Mitchell 250000.00 20833.3333
- 277 Jillian Carson 250000.00 20833.3333


SQLの割り算 まとめ

- SQLの割り算の演算子は「/」(スラッシュ)
- SQLの剰余はmodもしくは、演算子%で求められる
- SQL Serverでの割り算は、整数同士の割り算をすると小数点部が切り捨てられる。