SQLite Group By

我们已经学会了如何查询数据,如何对数据进行排序输出,现在我们想要对数据进行分组统计? SQLite 能否做到呢?

SQLite 提供了 GROUP BY 子句可以对相同的数据进行分组。

GROUP BY 子句通常用在 SELECT 语句中。

GROUP BY 子句在 SELECT 查询中的位置

SELECT 语句中, GROUP BY 子句放在 WHERE 子句之后,放在 ORDER BY 或 HAVING 子句之前。

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

GROUP BY 子句的基本语法

SELECT column-list
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2....columnN
ORDER BY column1, column2....columnN

我们可以在 GROUP BY 子句中使用多个列,但要确保使用的分组列在列清单中。

范例

假设 company 表有以下记录:

sqlite> SELECT * FROM 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 表中额外添加三条记录

sqlite> INSERT INTO COMPANY VALUES (8, 'Paul', 24, 'Houston', 20000.00 );
sqlite> INSERT INTO COMPANY VALUES (9, 'James', 44, 'Norway', 5000.00 );
sqlite> INSERT INTO COMPANY VALUES (10, 'James', 45, 'Texas', 5000.00 );

现在,我们的表就有了重复名称的记录

sqlite> SELECT * FROM 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
8           Paul        24          Houston     20000.0
9           James       44          Norway      5000.0
10          James       45          Texas       5000.0

我们用同样的 GROUP BY 语句来所有记录按 name 列进行分组

sqlite> SELECT name, SUM(salary) FROM company GROUP BY name;
name        SUM(salary)
----------  -----------
Allen       15000.0
David       85000.0
James       20000.0
Kim         45000.0
Mark        65000.0
Paul        40000.0
Teddy       20000.0

从表中可以看到,James 的薪水是所有 James 的薪水之和


让我们把 ORDER BY 子句与 GROUP BY 子句一起使用,对上面的分组记录按照 name 字段降序排列

sqlite> SELECT name, SUM(salary) FROM company 
        GROUP BY name ORDER BY name;
name        SUM(salary)
----------  -----------
Allen       15000.0
David       85000.0
James       20000.0
Kim         45000.0
Mark        65000.0
Paul        40000.0
Teddy       20000.0

SQLite 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.