今回は、Oracle・MySQL・PostgreSQL・SQL Serverの各データベース上でのgroup by文を試してみた。結果、MySQLのみ、group by句で指定していない項目をselect句に指定しても、エラーにならないことが判明した。
前提条件
下記記事のsalesテーブルの作成が完了していること。
![](https://www.purin-it.com/wp-content/uploads/2019/11/ocean-918897_640-320x180.jpg)
各DB上でgroup by文を試してみた(データ準備編)今回は、Oracle・MySQL・PostgreSQL・SQL Serverの各データベース上でのgroup by文を試すための、sal...
やってみたこと
Oracleの場合の実行結果
1) group by句で指定した項目と(集計項目以外の)select句で指定した項目が同一の場合
1 2 3 4 | select sale_date, product_name, sum(sales_amount) as sum_sales_amount from sales group by sale_date, product_name order by sale_date, product_name |
![Oracle_groupby実行結果1](https://www.purin-it.com/wp-content/uploads/2019/11/oracle_groupby_1.png)
2) (集計項目以外の)select句に、group by句で指定した項目以外が含まれる場合
1 2 3 4 | select sale_date, product_name, place_name, sum(sales_amount) as sum_sales_amount from sales group by sale_date, product_name order by sale_date, product_name, place_name |
![Oracle_groupby実行結果2](https://www.purin-it.com/wp-content/uploads/2019/11/oracle_groupby_2.png)
3) (集計項目以外の)select句が、group by句で指定した項目より少ない場合
1 2 3 4 | select sale_date, sum(sales_amount) as sum_sales_amount from sales group by sale_date, product_name order by sale_date |
![Oracle_groupby実行結果3](https://www.purin-it.com/wp-content/uploads/2019/11/oracle_groupby_3.png)
MySQLの場合の実行結果
1) group by句で指定した項目と(集計項目以外の)select句で指定した項目が同一の場合
1 2 3 4 | select sale_date, product_name, sum(sales_amount) as sum_sales_amount from world.sales group by sale_date, product_name order by sale_date, product_name |
![MySQL_groupby実行結果1](https://www.purin-it.com/wp-content/uploads/2019/11/mysql_groupby_1.png)
2) (集計項目以外の)select句に、group by句で指定した項目以外が含まれる場合
1 2 3 4 | select sale_date, product_name, place_name, sum(sales_amount) as sum_sales_amount from world.sales group by sale_date, product_name order by sale_date, product_name, place_name |
![MySQL_groupby実行結果2](https://www.purin-it.com/wp-content/uploads/2019/11/mysql_groupby_2.png)
3) (集計項目以外の)select句が、group by句で指定した項目より少ない場合
1 2 3 4 | select sale_date, sum(sales_amount) as sum_sales_amount from world.sales group by sale_date, product_name order by sale_date |
![MySQL_groupby実行結果3](https://www.purin-it.com/wp-content/uploads/2019/11/mysql_groupby_3.png)
PostgreSQLの場合の実行結果
1) group by句で指定した項目と(集計項目以外の)select句で指定した項目が同一の場合
1 2 3 4 | select sale_date, product_name, sum(sales_amount) as sum_sales_amount from sales group by sale_date, product_name order by sale_date, product_name |
![PostgreSQL_groupby実行結果1](https://www.purin-it.com/wp-content/uploads/2019/11/postgresql_groupby_1.png)
2) (集計項目以外の)select句に、group by句で指定した項目以外が含まれる場合
1 2 3 4 | select sale_date, product_name, place_name, sum(sales_amount) as sum_sales_amount from sales group by sale_date, product_name order by sale_date, product_name, place_name |
![PostgreSQL_groupby実行結果2](https://www.purin-it.com/wp-content/uploads/2019/11/postgresql_groupby_2.png)
3) (集計項目以外の)select句が、group by句で指定した項目より少ない場合
1 2 3 4 | select sale_date, sum(sales_amount) as sum_sales_amount from sales group by sale_date, product_name order by sale_date |
![PostgreSQL_groupby実行結果3](https://www.purin-it.com/wp-content/uploads/2019/11/postgresql_groupby_3.png)
SQL Serverの場合の実行結果
1) group by句で指定した項目と(集計項目以外の)select句で指定した項目が同一の場合
1 2 3 4 | select sale_date, product_name, sum(sales_amount) as sum_sales_amount from dbo.sales group by sale_date, product_name order by sale_date, product_name |
![SQLServer_groupby実行結果1](https://www.purin-it.com/wp-content/uploads/2019/11/sqlserver_groupby_1.png)
2) (集計項目以外の)select句に、group by句で指定した項目以外が含まれる場合
1 2 3 4 | select sale_date, product_name, place_name, sum(sales_amount) as sum_sales_amount from dbo.sales group by sale_date, product_name order by sale_date, product_name, place_name |
![SQLServer_groupby実行結果2](https://www.purin-it.com/wp-content/uploads/2019/11/sqlserver_groupby_2.png)
3) (集計項目以外の)select句が、group by句で指定した項目より少ない場合
1 2 3 4 | select sale_date, sum(sales_amount) as sum_sales_amount from dbo.sales group by sale_date, product_name order by sale_date |
![SQLServer_groupby実行結果3](https://www.purin-it.com/wp-content/uploads/2019/11/sqlserver_groupby_3.png)