English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
SQLite GROUP BY 子句はSELECT文と組み合わせて同じデータをグループ化するために使用されます。
GROUP BY子句はSELECT文のWHERE子句の後に、ORDER BY子句の前に位置付けられます。
以下はGROUP BY子句の基本的な文法です。GROUP BY子句はWHERE子句の後に、ORDER BY子句の前に位置付けられなければなりません。
SELECT column-リスト FROM table_name WHERE [ conditions ] GROUP BY column1, column2....columnN ORDER BY column1, column2....columnN
GROUP BY子句で複数の列を使用できます。グループ化に使用する列は、column-リストで利用可能。
以下のレコードを持つCOMPANYテーブルを考えてみましょう。
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
各顧客の給料合計を知りたい場合は、GROUP BYクエリは以下のようになります-
sqlite> SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME;
出力結果:
NAME SUM(SALARY) ---------- ----------- Allen 15000.0 David 85000.0 James 10000.0 Kim 45000.0 Mark 65000.0 Paul 20000.0 Teddy 20000.0
現在、以下のINSERT文を使ってCOMPANYテーブルにさらに3つのレコードを作成しましょう。
INSERT INTO COMPANY VALUES (8, 'Paul', 24, 'Houston', 20000.00 ); INSERT INTO COMPANY VALUES (9, 'James', 44, 'Norway', 5000.00 ); INSERT INTO COMPANY VALUES (10, 'James', 45, 'Texas', 5000.00 );
現在、私たちのテーブルには以下の重複名のレコードがあります。
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0 8 Paul 24 Houston 20000.0 9 James 44 Norway 5000.0 10 James 45 Texas 5000.0
再び、同じ文を使ってNAME列を使ってすべてのレコードをグループ化してみましょう:
sqlite> SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME;
这将产生以下结果。
NAME SUM(SALARY) ---------- ----------- Allen 15000 David 85000 James 20000 Kim 45000 Mark 65000 Paul 40000 Teddy 20000
让我们如下使用ORDER BY子句和GROUP BY子句-
sqlite> SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME DESC;
这将产生以下结果。
NAME SUM(SALARY) ---------- ----------- Teddy 20000 Paul 40000 Mark 65000 Kim 45000 James 20000 David 85000 Allen 15000