mysql和sqlalchemy_mysql和SQLAlchemy

标签:

mysql和SQLAlchemy

一、数据库sql

1.1 MySQL对数据表进行分组查询(GROUP BY)

1、GROUP BY基本语法格式:

GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组。字段中值相等的为一组。基本的语法格式如下:

GROUP BY 属性名 [HAVING 条件表达式] [WITH ROLLUP]

属性名:是指按照该字段的值进行分组。

HAVING 条件表达式:用来限制分组后的显示,符合条件表达式的结果将被显示。

WITH ROLLUP:将会在所有记录的最后加上一条记录。加上的这一条记录是上面所有记录的总和。

2、GROUP BY联合函数使用:

1)GROUP BY关键字可以和GROUP_CONCAT()函数一起使用。

2)GROUP_CONCAT()函数会把每个分组中指定的字段值都显示出来。

3)同时,GROUP BY关键字通常与集合函数一起使用。集合函数包括COUNT()函数、SUM()函数、AVG()函数、MAX()函数和MIN()函数等。

4)注意:如果GROUP BY不与上述函数一起使用,那么查询结果就是字段取值的分组情况。字段中取值相同的记录为一组,但是只显示该组的第一条记录。

1. 首先执行不带GROUP BY关键字的SELECT语句。如下图所示:

select * from employee;

20180110194429978079.png

2. 执行带有GROUP BY关键字的SELECT语句。代码如下:

SELECT * FROM employee GROUP BY sex;

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

| id | num  | name   | sex | age | homeaddress |

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

|  2 | 1001 | 马莉莉 | 女  |  24 | 河南开封    |

|  1 | 1001 | 王冬军 | 男  |  26 | 河南郑州    |

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

2 rows in set (0.00 sec)

上图中代码执行的结果只显示了两条记录。这两条记录的sex字段的值分别为“女”和“男”。

查询结果进行比较,GROUP BY关键字只显示每个分组的一条记录。这说明,GROUP BY关键字单独使用时,只能查询出每个分组的一条记录,这样做的意义不大。

因此,一般在使用集合函数时才使用GROUP BY关键字。

1.2 GROUP BY关键字与GROUP_CONCAT()函数一起使用

GROUP BY关键字与GROUP_CONCAT()函数一起使用时,每个分组中指定的字段值会全部显示出来。

实例:将employee表按照sex字段进行分组查询。使用GROUP_CONCAT()函数将每个分组的name字段的值显示出来。

SELECT sex,GROUP_CONCAT(name) FROM employee GROUP BY sex;

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

| sex | GROUP_CONCAT(name) |

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

| 女  | 马莉莉,张雪梅      |

| 男  | 王冬军,刘兵,Tom    |

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

2 rows in set (0.00 sec)

上图中代码执行的结果显示,查询结果分为两组。sex字段取值为“女”的记录是一组,取值为“男”的记录是一组。

每一组中所有人的名字都被查询出来了。

该实例说明,使用GROUP_CONCAT()函数可以很好的把分组情况表示出来。

1.3 GROUP BY关键字与集合函数一起使用

GROUP BY关键字与集合函数一起使用时,可以通过集合函数计算分组中的总记录、最大值、最小值等。

实例:将employee表的sex字段进行分组查询。sex字段取值相同的为一组。然后对每一组使用集合函数COUNT()函数进行计算,求出每一组的记录数。

mysql> SELECT sex,COUNT(sex) FROM employee GROUP BY sex;

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

| sex | COUNT(sex) |

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

| 女  |          2 |

| 男  |          3 |

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

2 rows in set (0.00 sec)

上图中代码执行的结果显示,查询结果按sex字段的取值进行分组。取值为“女”的记录为一组,取值为“男”的记录为一组。

COUNT(sex)计算出了sex字段不同分组的记录数。第一组共有2条记录,第二组共有3条记录。

标签:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值