MySQL单表查询之分组查询

分组查询

mysql> select countrycode as total fromCity where id<10;

+-------+

| total |

+-------+

| AFG  |

| AFG  |

| AFG  |

| AFG  |

| NLD  |

| NLD  |

| NLD  |

| NLD  |

| NLD  |

+-------+

9 rows in set (0.00 sec)

mysql> select countrycode,count(*) astotal from City where id<10 group by countrycode;

+-------------+-------+

| countrycode | total |

+-------------+-------+

| AFG         |    4 |

| NLD         |    5 |

+-------------+-------+

2 rows in set (0.00 sec)

把相同的字段进行分组,并对分组内的数据进行统计。

使用having过滤分组

Having用于分组之后过滤数据,where用于分组之前选择数据。

mysql> select countrycode,count(*) astotal from City where id<101 group by countrycode;

+-------------+-------+

| countrycode | total |

+-------------+-------+

| AFG         |    4 |

| AGO         |    5 |

| AIA         |    2 |

| ALB         |    1 |

| AND         |    1 |

| ANT         |    1 |

| ARE         |    5 |

| ARG         |   32 |

| ASM         |    2 |

| ATG         |    1 |

| DZA         |   18 |

| NLD         |   28 |

+-------------+-------+

12 rows in set (0.01 sec)

mysql> select countrycode,count(*) astotal from City where id<101 group by countrycode having count(*)>10;

+-------------+-------+

| countrycode | total |

+-------------+-------+

| ARG         |   32 |

| DZA         |   18 |

| NLD         |   28 |

+-------------+-------+

3 rows in set (0.00 sec)

先选择数据,然后分组,然后having过滤数据。

在group by后求和

mysql> select countrycode,count(*) astotal from City where id<10 group by countrycode with rollup;

+-------------+-------+

| countrycode | total |

+-------------+-------+

| AFG         |    4 |

| NLD         |     5 |

| NULL        |    9 |

+-------------+-------+

3 rows in set (0.00 sec)

在最后增加一行显示求和结果。

多字段分组

先按照第一个字段进行分组,按照分组内容进行第二个字段的分组。

限制查询结果行数量

mysql> select * from City limit 3;

+----+----------+-------------+----------+------------+

| ID | Name     | CountryCode | District | Population |

+----+----------+-------------+----------+------------+

|  1| Kabul    | AFG         | Kabol    |   1780000 |

|  2| Qandahar | AFG         | Qandahar|     237500 |

|  3| Herat    | AFG         | Herat    |    186800 |

+----+----------+-------------+----------+------------+

3 rows in set (0.00 sec)

前3行

mysql> select * from City limit 10,10;

+----+-------------------+-------------+---------------+------------+

| ID | Name              | CountryCode | District      | Population |

+----+-------------------+-------------+---------------+------------+

| 11 | Groningen         | NLD         | Groningen     |    172701 |

| 12 | Breda             | NLD         | Noord-Brabant |     160398 |

| 13 | Apeldoorn         | NLD         | Gelderland    |    153491 |

| 14 | Nijmegen          | NLD         | Gelderland    |    152463 |

| 15 | Enschede          | NLD         | Overijssel    |    149544 |

| 16 | Haarlem           | NLD         | Noord-Holland |     148772 |

| 17 | Almere            | NLD         | Flevoland     |    142465 |

| 18 | Arnhem            | NLD         | Gelderland    |    138020 |

| 19 | Zaanstad          | NLD         | Noord-Holland |     135621 |

| 20 | 麓s-Hertogenbosch  | NLD        | Noord-Brabant |     129170 |

+----+-------------------+-------------+---------------+------------+

10 rows in set (0.00 sec)

从10开始往后的10行。

时间: 2024-10-27 16:38:58

MySQL单表查询之分组查询的相关文章

MySQL单表多字段模糊查询解决方法

在最近的一个项目需要实现在单表中对多字段进行多个关键字的模糊查询,但这数个关键字并不一定都存在于某个字段 例如现有table表,其中有title,tag,description三个字段,分别记录一条资料的标题,标签和介绍.然后根据用户输入的查询请求,将输入的字串通过空格分割为多个关键字,再在这三个字段中查询包含这些关键字的记录. 可目前遇到的问题是,这些关键字是可能存在于三个字段中的任意一个或者多个,但又要求三个字段必须包含所有的关键词.如果分别对每个字段进行模糊匹配,是没法实现所需的要求,由此

mysql 单表百万级记录查询分页优化

insert select (制造百万条记录) 在开始百万级数据的查询之前,自己先动手制造百万级的记录来供我们使用,使用的方法是insert select方法 INSERT 一般用来给表插入一个指定列值的行.但是,INSERT 还存在另一种形式,可以利用它将一条SELECT 语句的结果插入表中.这就是所谓的INSERT SELECT, 顾名思义,它是有一条INSERT语句和一条SELECT语句组成的. 现在,有一个warning_reparied表,有2447条记录,如下: mysql> sel

Django学习【第7篇】:Django之ORM跨表操作(聚合查询,分组查询,F和Q查询等)

django之跨表查询及添加记录 一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);     一本书只应该由一个出版商出版,所以出版商和书籍是一对多关联关系(one-to-many). 创建一对一的关系:OneToOne("要绑定关系的表名") 创建一对多的关系:ForeignKey("要绑定关系的表名") 创建多对多的关系:ManyToMany(&qu

Django之ORM跨表操作(聚合查询,分组查询,F和Q查询等)

一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);     一本书只应该由一个出版商出版,所以出版商和书籍是一对多关联关系(one-to-many). 创建一对一的关系:OneToOne("要绑定关系的表名") 创建一对多的关系:ForeignKey("要绑定关系的表名") 创建多对多的关系:ManyToMany("要绑定关系的表名"

表连接和分组查询

分组查询:分组查询就是按某一列分组,相同的列合并,得到结果可能他少于总记录 使用group by分组查询:按什么分(年级.姓氏.地址.年龄)年级 分组查询语法:Select * from <表名>Where 条件Group by 列名 Group by后的列名必须在*里面出现 Demo:Select GradeId From StudentGroup by GradeId --统计每学期男女同学的人数 该怎么办select GradeId as 编号,COUNT(Sex) as 总和 from

连表查询和分组查询

表连接和分组链接 1.分组查询 01.分组查询是按某一列分组,相同的列合并,查询出结果 02.Group by 关键字 03.分组查询支持的条件: 001.年级 002.姓氏 003.地址 004.年龄 04.语法 select 列名 from 表明 where 条件 group by 列名 *group by中查询的列,必须出现在查询列中!!! *分组的顺序为由前到后 2.having 01.对分组后的数据进行筛选,将"组"看做"列"来限定条件 02.语法 sel

Django Mysql数据库-聚合查询与分组查询

一.聚合查询与分组查询(很重要!!!) 聚合查询:aggregate(*args, **kwargs),只对一个组进行聚合 from django.db.models import Avg,Sum,Count,Max,Min # 1.查询所有图书的平均价格 print(models.Book.objects.all().aggregate(Avg("price"))) aggregate()是QuerySet 的一个终止子句(也就是返回的不再是一个QuerySet集合的时候),意思是说

MySQL单表百万数据记录分页性能优化

原文地址:http://www.cnblogs.com/lyroge/p/3837886.html MySQL单表百万数据记录分页性能优化 背景: 自己的一个网站,由于单表的数据记录高达了一百万条,造成数据访问很慢,Google分析的后台经常报告超时,尤其是页码大的页面更是慢的不行. 测试环境: 先让我们熟悉下基本的sql语句,来查看下我们将要测试表的基本信息 use infomation_schemaSELECT * FROM TABLES WHERE TABLE_SCHEMA = 'dbna

【Hibernate】Hibernate的聚类查询、分组查询、排序与时间之差

在Hibernate中的HQL语句其实能够基本能够实现SQL语句所做的事情,正如jQuery至于javascript一样.虽然HQL语句是对类的查询,但是HQL在实行聚类查询.分组查询.排序与时间之差等查询,也无须把查询结果查询出来,再通过对List的处理才得到结果. 比如有一张如下的Testtable表: 要像<[Mysql]求出离最近相差X天的项,sql语句关于日期的比对>(点击打开链接)一样,查询date字段离现在具有30年的项有多少,SQL语句则这样写: select count(*)

S1/C#语言和数据库技术基础/11-连接查询和分组查询

分组查询 采用分组查询的T-SQL语句如下. SELECT   CourseID,AVG(Score)   AS   课程平均成绩 FROM   Score GROUP   BY   CourseID (1)查询男女学生的人数各是多少 SELECT   COUNT(*)    AS   人数,SSex    FROM   Students GROUP   BY   SSex (2)查询每个年级的总人数 SELECT   COUNT(*)   AS   年级人数,SGrade   FROM   S