mysql group by日期_GROUP BY和HAVING 以及mysql中常用的日期函数

忘是亡心i 2023-01-12 11:55 205阅读 0赞

一.mysql中的GROUP BY和HAVING

GROUP BY常见的是和聚合函数(SUM,MIN,MAX,COUNT)搭配使用.

比如:

SELECT category,SUM(money) AS `total` FROM user_money GROUP BY category;

按类别分组统计user_money表每个类别总计有多少money

现在如果增加个条件,需要统计每个类别中支出的money总量,比如rule=1为支出,则改写语句为

SELECT category,SUM(money) AS `total` FROM user_money WHERE rule=1 GROUP BY category;

如果需要统计每个类别支出money总量,并且需要过滤出支出money总量大于500的分组

SELECT category,SUM(money) AS `total` FROM user_money WHERE rule=1 GROUP BY category HAVING `total`>500;

1.WHERE用于对分组前的数据过滤,HAVING用于对分组后的数据进行过滤.

2.使用GROUP BY两个注意点

(1)SELECT中出现的字段,要么是聚合函数,要么在GROUP BY中出现;否则sql语句可以执行,但该字段只是取了分组记录中的第一个记录的该字段值(该值可以使用ORDER BY 改变),没任何意义

(2)使用WHERE过滤分组前的数据,然后使用GROUP BY分组,再使用HAVING过滤分组后的数据;两者后面条件字段都不能出现聚合函数计算后的别名字段

(3)ORDER BY 和 GROUP BY顺序问题

SELECT category,SUM(money) AS `total` FROM user_money ORDER BY id DESC GROUP BY category HAVING `total`>500;

ORDER BY 放在GROUP BY的前面,表示对未分组的结果进行排序(排序字段不能是聚合函数计算后的别名字段)一般没用,反正你最终的目的是聚合计算的

SELECT category,SUM(money) AS `total` FROM user_money DESC GROUP BY category HAVING `total`>500 ORDER BY t DESC;

GROUP BY放在ORDER BY的前面,别是对分组后的结果进行排序,这个时候排序字段一把是聚合函数计算后的别名字段或者是GROUP BY的分组字段.

(4)GROUP BY中的多字段分组

先依据第一字段分组,然后再依据第二字段对上一次分组的结果再次进行分组

二.mysql的有用的日期函数

SELECT NOW() -> 2017-05-20 20:36:49

SELECT CURDATE() -> 2017-05-20

SELECT CURDATE() -> 2017-05-20

SELECT CURRENT_TIME() -> 20:38:37

SELECT UNIX_TIMESTAMP(NOW()) ->1495283945 将日期转为时间戳

发表评论

表情:
评论列表 (有 0 条评论,205人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQL GROUP BY

    1. 只会返回分组后的一条结果,但是实际上里面含有的结果不仅有一条 \\![加粗样式][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow

    相关 mysql group by order by

    这两天让一个数据查询难了。主要是对group by 理解的不够深入。才出现这样的情况 这种需求,我想很多人都遇到过。下面是我模拟我的内容表 复制代码 代码如下:

    相关 mysql GROUP BYHAVING

    GROUP BY语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。 select子句中的列名必须为分组列或列函数,列函数对于group by子句