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子句,则必须在ORDER BY子句之前。
SELECT column-list FROM table_name WHERE [ conditions ] GROUP BY column1, column2....columnN ORDER BY column1, column2....columnN
您可以在GROUP BY子句中使用多个列。确保要用于分组的任何列,该列都应该在column-list中可用。
考虑带有以下记录的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.
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