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での割り算は、整数同士の割り算をすると小数点部が切り捨てられる。