zoukankan      html  css  js  c++  java
  • GROUP BY 聚合函数(max min sum avg count) 和HAVING的 使用

    重新复习一下这个都源自于我经常需要查的一个需求

    “要找到表里面 出现了两次或者三次的某个字段”

    现在假设有一张表字段是

    +----+---------------------+-----------------------+---------------------+
    | id | customer_service_id | refund_application_id | create_time         |
    +----+---------------------+-----------------------+---------------------+
    |  1 |                   1 |                199885 | 2016-10-27 15:39:59 |
    |  2 |                   2 |                199886 | 2016-10-27 15:46:33 |
    |  3 |                   3 |                199887 | 2016-10-27 15:47:04 |
    |  4 |                   4 |                199888 | 2016-10-27 15:48:41 |
    |  5 |                   5 |                199888 | 2016-10-27 15:48:41 |
    +----+---------------------+-----------------------+---------------------+

    我在现在要找出refund_applicaiton_id出现了相同的两次以上的refund_application_id 如何操作?

    select * from ec_temporary_csmap group by refund_application_id HAVING count(refund_application_id)>=2;

    这条语句可以帮我找到该行数据,但是他只会显示着一条

     5 |                   5 |                199888 | 2016-10-27 15:48:41 |

    这是为什么呢? 因为group by会为我们对指定字段进行分组,如果分组字段有重复的值出现,则只会留其中一条,我们上面的语句就是对refund_application_id进行了分组,所以他都是唯一的,然后基于此我们使用HAVING加上聚合函数count对分组数据进行筛选。我们的条件的是refund_application_id 出现次数大于两次的分组。自然就得到了我们想要的结果。

    另外需要注意的事情分组之后才能使用HAVING 来利用聚合函数来得到我们想要的结果,where指定条件里面是无法使用聚合函数的。

    其实直接操作数据库的时间还是蛮多的,但是大部分时间都是在操作简单的查询语句,对于稍微复杂的语句没有更多的涉猎,及时每次用到的时候看看后面由于不经常使用就又生疏了,所以最近会陆陆续续纪录一些。 

  • 相关阅读:
    电池的并联与串联
    [转]为什么我会认为SAP是世界上最好用最牛逼的ERP系统,没有之一?
    go module
    thinkPHP5.1自动生成目录结构
    java多线程-锁分析
    Walle 2.0(瓦力)的安装
    轻量日志系统Loki
    Zabbix5.0的安装(超详细)
    政策制定的艺术
    浅谈对golang中的defer,panic,recover理解
  • 原文地址:https://www.cnblogs.com/piperck/p/6149178.html
Copyright © 2011-2022 走看看