sql group by 用法

GROUP BY 语句
GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。

SQL GROUP BY 语法
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name

mysql教程> CREATE TABLE Employee(
    ->     id            int,
    ->     first_name    VARCHAR(15),
    ->     last_name     VARCHAR(15),
    ->     start_date    DATE,
    ->     end_date      DATE,
    ->     salary        FLOAT(8,2),
    ->     city          VARCHAR(10),
    ->     description   VARCHAR(15)
    -> );
Query OK, 0 rows affected (0.03 sec)

mysql>
mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->              values (1,'Jason',    'Martin',  '19960725',  '20060725', 1234.56, 'Toronto',  'Programmer');
Query OK, 1 row affected (0.00 sec)

mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->               values(2,'Alison',   'Mathews',  '19760321', '19860221', 6661.78, 'Vancouver','Tester');
Query OK, 1 row affected (0.02 sec)

mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->               values(3,'James',    'Smith',    '19781212', '19900315', 6544.78, 'Vancouver','Tester');
Query OK, 1 row affected (0.00 sec)

mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->               values(4,'Celia',    'Rice',     '19821024', '19990421', 2344.78, 'Vancouver','Manager');
Query OK, 1 row affected (0.00 sec)

mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->               values(5,'Robert',   'Black',    '19840115', '19980808', 2334.78, 'Vancouver','Tester');
Query OK, 1 row affected (0.01 sec)

mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->               values(6,'Linda',    'Green',    '19870730', '19960104', 4322.78,'New York',  'Tester');
Query OK, 1 row affected (0.02 sec)

mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->               values(7,'David',    'Larry',    '19901231', '19980212', 7897.78,'New York',  'Manager');
Query OK, 1 row affected (0.02 sec)

mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->               values(8,'James',    'Cat',     '19960917',  '20020415', 1232.78,NULL, 'Tester');
Query OK, 1 row affected (0.00 sec)

mysql>
mysql> select * from Employee;
+------+------------+-----------+------------+------------+---------+-----------+-------------+
| id   | first_name | last_name | start_date | end_date   | salary  | city      | description |
+------+------------+-----------+------------+------------+---------+-----------+-------------+
|    1 | Jason      | Martin    | 1996-07-25 | 2006-07-25 | 1234.56 | Toronto   | Programmer  |
|    2 | Alison     | Mathews   | 1976-03-21 | 1986-02-21 | 6661.78 | Vancouver | Tester      |
|    3 | James      | Smith     | 1978-12-12 | 1990-03-15 | 6544.78 | Vancouver | Tester      |
|    4 | Celia      | Rice      | 1982-10-24 | 1999-04-21 | 2344.78 | Vancouver | Manager     |
|    5 | Robert     | Black     | 1984-01-15 | 1998-08-08 | 2334.78 | Vancouver | Tester      |
|    6 | Linda      | Green     | 1987-07-30 | 1996-01-04 | 4322.78 | New York  | Tester      |
|    7 | David      | Larry     | 1990-12-31 | 1998-02-12 | 7897.78 | New York  | Manager     |
|    8 | James      | Cat       | 1996-09-17 | 2002-04-15 | 1232.78 | NULL      | Tester      |
+------+------------+-----------+------------+------------+---------+-----------+-------------+
8 rows in set (0.00 sec)

mysql>
mysql>
mysql> SELECT city, COUNT(*) FROM employee GROUP BY city;
+-----------+----------+
| city      | COUNT(*) |
+-----------+----------+
| NULL      |        1 |
| New York  |        2 |
| Toronto   |        1 |
| Vancouver |        4 |
+-----------+----------+
4 rows in set (0.00 sec)

mysql>
mysql>
mysql>
mysql>
mysql> drop table Employee;
Query OK, 0 rows affected (0.00 sec)

与count()同用

mysql> SELECT city, COUNT(*) FROM employee
    -> WHERE description = 'Tester' OR description = 'Programmer'
    -> GROUP BY city;
+-----------+----------+
| city      | COUNT(*) |
+-----------+----------+
| New York  |        1 |
| Toronto   |        1 |
| Vancouver |        4 |
+-----------+----------+
3 rows in set (0.00 sec)

mysql>
mysql> drop table Employee;
Query OK, 0 rows affected (0.00 sec)

带上is not null

mysql> SELECT city, COUNT(*) FROM employee
    -> WHERE description IS NOT NULL
    -> GROUP BY city;
+-----------+----------+
| city      | COUNT(*) |
+-----------+----------+
| New York  |        2 |
| Toronto   |        1 |
| Vancouver |        4 |
+-----------+----------+
3 rows in set (0.02 sec)

最基本的

mysql> SELECT * FROM employee
    -> GROUP BY city;
+------+------------+-----------+------------+------------+---------+-----------+-------------+
| id   | first_name | last_name | start_date | end_date   | salary  | city      | description |
+------+------------+-----------+------------+------------+---------+-----------+-------------+
|    6 | Linda      | Green     | 1987-07-30 | 1996-01-04 | 4322.78 | New York  | Tester      |
|    1 | Jason      | Martin    | 1996-07-25 | 2006-07-25 | 1234.56 | Toronto   | Programmer  |
|    2 | Alison     | Mathews   | 1976-03-21 | 1986-02-21 | 6661.78 | Vancouver | Tester      |
+------+------------+-----------+------------+------------+---------+-----------+-------------+
3 rows in set (0.05 sec)

注:合计函数 (比如 SUM) 常常需要添加 GROUP BY 语句。
where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
  having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。

时间: 2024-09-30 01:47:33

sql group by 用法的相关文章

sql GROUP BY用法

group函数是对数据集按照某个字段或者表达式进行分组,获得一组组的集合,然后从每组中取出一个 指定字段或者表达式的值,放到单元格中进行扩展,扩展出来的每个单元格都保留了一个指针指向当前的组集, 该组集称为当前组.        因此在附属单元格中,需要对该组集进行操作时,不需要用任何条件和主单元格关联了,如果加设了条件,反倒画蛇添足,导致报表引擎还对组集中的记录进行遍历检索.   正确的group 用法:   不合理的group用法:         group函数的原理图示:  group

sql group by 用法与group by 语法

sql 与group by 是用来数据分组的,下面我们看数据库表称为EmployeeHours存放每一个公司员工的 日常 时间: Employee Date Hours John Smith 5/6/2004 8 Allan Babel 5/6/2004 8 Tina Crown 5/6/2004 8 John Smith 5/7/2004 9 Allan Babel 5/7/2004 8 Tina Crown 5/7/2004 10 John Smith 5/8/2004 8 Allan Ba

SQL GROUP BY 使用方法

SQL GROUP BY 使用方法 GROUP的声明 专GROUP声明是结合使用的总体职能组的结果集由一个或多个列. SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name 再来看个实例,数据表我用以前的就不写了我们直接看sql语句吧. SELECT Customer,SUM(OrderPrice) FROM

sql group by 语句用法

合计函数 (比如 SUM) 常常需要添加 GROUP BY 语句. GROUP BY 语句 GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组. SQL GROUP BY 语法 SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name SQL GROUP BY 实例 我们拥有下面这个 "Or

sql groupby-求解,SQL group by的一个问题。

问题描述 求解,SQL group by的一个问题. --来自scott表. select deptno,ename from emp group by deptno 其中deptno,ename都是emp表中的列名,但是老师说group by之后select中只能出现分组后的整体信息,不能出现组内的详细信息,说这是错的.但是分组后ename不也是group里面的整体信息吗?本人小白才开始接触SQL,想不明白,求大神开导下,谢谢. 解决方案 group by之后select的列必须是聚合的列,比

asp.net使用LINQ to SQL连接数据库及SQL操作语句用法分析_实用技巧

本文实例讲述了asp.net使用LINQ to SQL连接数据库及SQL操作语句用法.分享给大家供大家参考,具体如下: LINQ简介 LINQ:语言集成查询(Language INtegrated Query)是一组用于c#和Visual Basic语言的扩展.它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据. LINQ是一门查询语言,和SQL一样,通过一些关键字的组合,实现最终的查询. LINQ的分类 LINQ to Object LINQ to XML LIN

LINQ TO SQL ——Group by

原文:LINQ TO SQL --Group by 分组在SQL中应用的十分普遍,在查询,统计时都有可能会用到它.LINQ TO SQL中同样具备group的功能,这篇我来讲下LINQ TO SQL中关于group的用法.      说明:            1:group 不一定要用到多表查询中,单表查询也是可以的.            2:基本语法:                1>:group 分组后要取的字段或者是对象;                2>:by 分组对象,可以

MySQL Group By用法

MySQL Group By用法 我们现在回到函数上.记得我们用 SUM 这个指令来算出所有的 Sales (营业额)吧!如果我们的需求变成是要算出每一间店 (store_name) 的营业额 (sales),那怎么办呢?在这个情况下,我们要做到两件事:第一,我们对于 store_name 及 Sales 这两个栏位都要选出.第二,我们需要确认所有的 sales 都要依照各个 store_name 来分开算.这个语法为: SELECT "栏位1", SUM("栏位2"

sql group by语法与实例

  sql group by语法与实例 group by 语句 group by 语句用于结合合计函数,根据一个或多个列对结果集进行分组. sql group by 语法 select column_name, aggregate_function(column_name) from table_name where column_name operator value group by column_name 来看一个group by实例 比如表里内容是这样 gameid best top s