サーチ…
構文
- 関数([ DISTINCT ]式)-DISTINCTはオプションのパラメータです
- AVG([ALL | DISTINCT]式)
- COUNT({[ALL | DISTINCT]式] | *})
- GROUPING(<column_expression>)
- MAX([ALL | DISTINCT]式)
- MIN([ALL | DISTINCT]式)
- SUM([すべて| DISTINCT]式)
- VAR([ALL | DISTINCT]式)
OVER([partition_by_clause] order_by_clause) - VARP([ALL | DISTINCT]式)
OVER([partition_by_clause] order_by_clause - STDEV([ALL | DISTINCT]式)
OVER([partition_by_clause] order_by_clause) - STDEVP([ALL | DISTINCT]式)
OVER([partition_by_clause] order_by_clause)
備考
データベース管理では、集計関数は、複数の行の値が特定の基準で入力としてグループ化され、集合、袋またはリストなどのより重要な意味または測定の単一の値を形成する関数です。
MIN returns the smallest value in a given column
MAX returns the largest value in a given column
SUM returns the sum of the numeric values in a given column
AVG returns the average value of a given column
COUNT returns the total number of values in a given column
COUNT(*) returns the number of rows in a table
GROUPING Is a column or an expression that contains a column in a GROUP BY clause.
STDEV returns the statistical standard deviation of all values in the specified expression.
STDEVP returns the statistical standard deviation for the population for all values in the specified expression.
VAR returns the statistical variance of all values in the specified expression. may be followed by the OVER clause.
VARP returns the statistical variance for the population for all values in the specified expression.
集計関数は、
SELECT
ステートメントの「返された数値データの列」を計算するために使用されます。基本的には、選択したデータの特定の列の結果を要約します。 - SQLCourse2.com
すべての集約関数はNULL値を無視します。
和
Sum
関数は、グループ内のすべての行の値を合計します。 group by句を省略すると、すべての行が合計されます。
select sum(salary) TotalSalary
from employees;
TotalSalary |
---|
2500 |
select DepartmentId, sum(salary) TotalSalary
from employees
group by DepartmentId;
DepartmentId | TotalSalary |
---|---|
1 | 2000年 |
2 | 500 |
条件付き集計
支払いテーブル
顧客 | 支払いタイプ | 量 |
---|---|---|
ピーター | クレジット | 100 |
ピーター | クレジット | 300 |
ジョン | クレジット | 1000 |
ジョン | デビット | 500 |
select customer,
sum(case when payment_type = 'credit' then amount else 0 end) as credit,
sum(case when payment_type = 'debit' then amount else 0 end) as debit
from payments
group by customer
結果:
顧客 | クレジット | デビット |
---|---|---|
ピーター | 400 | 0 |
ジョン | 1000 | 500 |
select customer,
sum(case when payment_type = 'credit' then 1 else 0 end) as credit_transaction_count,
sum(case when payment_type = 'debit' then 1 else 0 end) as debit_transaction_count
from payments
group by customer
結果:
顧客 | credit_transaction_count | debit_transaction_count |
---|---|---|
ピーター | 2 | 0 |
ジョン | 1 | 1 |
AVG()
集計関数AVG()は、指定された式の平均値を返します。通常、列の数値です。世界中の都市における年間人口の計算を含む表があるとします。ニューヨーク市の記録は、以下のようになります。
テーブルの例
市の名前 | 人口 | 年 |
---|---|---|
ニューヨーク市 | 8,550,405 | 2015年 |
ニューヨーク市 | ... | ... |
ニューヨーク市 | 8,000,906 | 2005年 |
過去10年間の都市名、人口測定値、および測定年数を含む表から、ニューヨーク市の平均人口を選択するには:
QUERY
select city_name, AVG(population) avg_population
from city_population
where city_name = 'NEW YORK CITY';
母集団は時間の経過とともに平均化されているので、測定年がクエリからどのように欠けているかに注目してください。
結果
市の名前 | 平均人口 |
---|---|
ニューヨーク市 | 8,250,754 |
注:AVG()関数は数値を数値型に変換します。これは、日付を扱う際に留意することが特に重要です。
リストの連結
この SO答えの部分的な信用。
List Concatenationは、各グループの値を単一の文字列に組み合わせることによって、列または式を集約します。各値(空白または省略時のカンマ)を区切る文字列で、結果内の値の順序を指定できます。 SQL標準の一部ではありませんが、すべての主要なリレーショナルデータベースベンダーは、独自の方法でサポートしています。
MySQL
SELECT ColumnA
, GROUP_CONCAT(ColumnB ORDER BY ColumnB SEPARATOR ',') AS ColumnBs
FROM TableName
GROUP BY ColumnA
ORDER BY ColumnA;
Oracle&DB2
SELECT ColumnA
, LISTAGG(ColumnB, ',') WITHIN GROUP (ORDER BY ColumnB) AS ColumnBs
FROM TableName
GROUP BY ColumnA
ORDER BY ColumnA;
PostgreSQL
SELECT ColumnA
, STRING_AGG(ColumnB, ',' ORDER BY ColumnB) AS ColumnBs
FROM TableName
GROUP BY ColumnA
ORDER BY ColumnA;
SQLサーバー
SQL Server 2016およびそれ以前
WITH CTE_TableName AS (
SELECT ColumnA, ColumnB
FROM TableName)
SELECT t0.ColumnA
, STUFF((
SELECT ',' + t1.ColumnB
FROM CTE_TableName t1
WHERE t1.ColumnA = t0.ColumnA
ORDER BY t1.ColumnB
FOR XML PATH('')), 1, 1, '') AS ColumnBs
FROM CTE_TableName t0
GROUP BY t0.ColumnA
ORDER BY ColumnA;
SQL Server 2017およびSQL Azure
SELECT ColumnA
, STRING_AGG(ColumnB, ',') WITHIN GROUP (ORDER BY ColumnB) AS ColumnBs
FROM TableName
GROUP BY ColumnA
ORDER BY ColumnA;
SQLite
注文なしで:
SELECT ColumnA
, GROUP_CONCAT(ColumnB, ',') AS ColumnBs
FROM TableName
GROUP BY ColumnA
ORDER BY ColumnA;
順序付けにはサブクエリまたはCTEが必要です。
WITH CTE_TableName AS (
SELECT ColumnA, ColumnB
FROM TableName
ORDER BY ColumnA, ColumnB)
SELECT ColumnA
, GROUP_CONCAT(ColumnB, ',') AS ColumnBs
FROM CTE_TableName
GROUP BY ColumnA
ORDER BY ColumnA;
カウント
あなたは行の数を数えることができます:
SELECT count(*) TotalRows
FROM employees;
TotalRows |
---|
4 |
または部門ごとの従業員を数えます:
SELECT DepartmentId, count(*) NumEmployees
FROM employees
GROUP BY DepartmentId;
DepartmentId | NumEmployees |
---|---|
1 | 3 |
2 | 1 |
NULL
値を数えないエフェクトを使用して、列/式を数えることができます。
SELECT count(ManagerId) mgr
FROM EMPLOYEES;
mgr |
---|
3 |
(null値のmanagerID列が1つあります)
また、 COUNTなどの別の関数の中でDISTINCTを使用すると、そのセットのDISTINCTメンバーだけを検索して操作を実行できます。
例えば:
SELECT COUNT(ContinentCode) AllCount
, COUNT(DISTINCT ContinentCode) SingleCount
FROM Countries;
異なる値が返されます。 SingleCountは個々の大陸を一度カウントしますが、 AllCountは重複を含みます。
ContinentCode |
---|
OC |
EU |
として |
NA |
NA |
AF |
AF |
AllCount:7 SingleCount:5
最大
列の最大値を求める:
select max(age) from employee;
上記の例では、 employee
テーブルの列のage
に最も大きな値が返されます。
構文:
SELECT MAX(column_name) FROM table_name;
分
列の最小値を求める:
select min(age) from employee;
上記の例の列のための最小値を返しますage
のemployee
テーブル。
構文:
SELECT MIN(column_name) FROM table_name;