サーチ…


構文

  • 関数([ 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およびそれ以前

DRY原則を奨励するためにCTEが含まれています

  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;

上記の例の列のための最小値を返しますageemployeeテーブル。

構文:

 SELECT MIN(column_name) FROM table_name;


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow