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指定条件里面是无法使用聚合函数的。

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

  • 相关阅读:
    leveldb的搜索
    分布式存储bfs
    golang channel的行为
    支持rotate和大小限制的golang log库
    后台架构 一些需要注意的地方
    不要滥用面向对象,写出难以阅读和修改的代码
    goloader
    逻辑引擎、工作流、CMDB小感
    HTML5学习笔记4
    HTML5学习笔记3
  • 原文地址:https://www.cnblogs.com/piperck/p/6149178.html
Copyright © 2011-2022 走看看