zoukankan      html  css  js  c++  java
  • GROUP BY和HAVING 以及mysql中常用的日期函数

    一.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 将日期转为时间戳

  • 相关阅读:
    Android学习路径(两)项目文件本身使用场景和文件演示
    A左右ndroid正在使用Uri监视数据库中的更改
    离PACKET_INp获取信息acket data
    curl 命令
    POJ 3177 Redundant Paths POJ 3352 Road Construction(双连接)
    Linux 下一个 Mysql error 2002 错误解决
    图片打水印 缩放 和一个输入流的转换
    qt Qt5开发
    qt 关于Qt中MVC的介绍与使用
    qt mvc3
  • 原文地址:https://www.cnblogs.com/itfenqing/p/6883229.html
Copyright © 2011-2022 走看看