group by 和count的联合使用问题

今天写查询语句遇到一个问题,就是用group by进行分组以后,用count统计分组以后的个数,

开始写的语句大体是:

select count(m.fbrandid)   from table as m group by m.fbrandid, month(fdate);

数据库中的数据为:

+----------+------------+-----------+------------------------+
                       | Fbrandid | Fdate      | Ftotalnum | Fpersons |
                      +----------+------------+-----------+------------------------+
                       |       32 | 2008-11-01 |        10 |        8 |
                       |       32 | 2008-11-02 |        10 |        8 |
                       |       32 | 2008-11-03 |        10 |        8 |
                       |       32 | 2008-11-04 |        10 |        8 |
                       |       98 | 2008-11-01 |        10 |        8 |
                       |       98 | 2008-11-02 |        10 |        8 |
                       |       98 | 2008-11-03 |        10 |        8 |
                       |       98 | 2008-11-04 |        10 |        8 |
                      +----------+------------+-----------+----------------+

查出来的结果居然不是同样的一个值:

+------------+
                      | count(*) |
                      +-----------+
                      |      4      |
                      |      4      |

为何这里count(*)的结果是分组以后每组中的记录的条数,而不是分组的数目.

解决办法:

1 、将所有的数据查出来,在外面进行处理,这是非常不好的一种想法,请记住,我们用的是数据库,要更多的依赖数据库去解决问题,要有个信念:凡是在外面(程序)能解决的问题,用数据库都能解决!

2 、尝试引入子查询,如下:

      select count(1) from (
    -> select fbrandid, month(fdate) from table as m     
    -> where 1 = 1     
    -> group by m.fbrandid, month(fdate)
    -> ) aa;

就是说对查询的结果再去统计,就是分组的数目了。

3.   请参考mysql的SQL_CALC_FOUND_ROWS() 和 FOUND_ROWS() 函数,似乎这个是最合理的了

结论:

1、 并不是说group by和count()操作不能同时使用,只是说查出来的东西不一样,每个都有其应用的情况,如本例:最开始方法查出来的就是分组以后每个分组的记录条数,如果程序中要计算每个分组的记录条数,恰恰用这种方法。

2 、要更多靠数据库去解决问题。

3 、意识到子查询的威力,当你遇到解决不了的问题的时候,可以试试用子查询去解决。(实践证明的)

group by 和count的联合使用问题 [转]的更多相关文章

  1. linq to sql (Group By/Having/Count/Sum/Min/Max/Avg操作符)

    Group By/Having操作符 适用场景:分组数据,为我们查找数据缩小范围. 说明:分配并返回对传入参数进行分组操作后的可枚举对象.分组:延迟 1.简单形式: var q = from p in ...

  2. linq to sql (Group By/Having/Count/Sum/Min/Max/Avg操作符) (转帖)

    http://wenku.baidu.com/link?url=2RsCun4Mum1SLbh-LHYZpTmGFMiEukrWAoJGKGpkiHKHeafJcx2y-HVttNMb1BqJpNdw ...

  3. linq-to-sql实现left join,group by,count

    linq-to-sql实现left join,group by,count 用linq-to-sql实现下面的sql语句: SELECT p.ParentId, COUNT(c.ChildId) FR ...

  4. [转]linq to sql (Group By/Having/Count/Sum/Min/Max/Avg操作符)

    本文转自:http://www.cnblogs.com/jack-liang/archive/2011/03/22/1991554.html Group By/Having操作符 适用场景:分组数据, ...

  5. group by 和count 联合使用问题

    工作中要根据用户发布的产品数量来排序做分页,使用group by uid 用count(uid) 来统计的数量和想要的数量不正确. count统计的数量是被group by 分组以后每一组中数据的数量 ...

  6. group by和count联合使用问题

    要根据用户发布的产品数量来排序做分页,使用group ) FROM( SELECT uid,COU 工作中要根据用户发布的产品数量来排序做分页,使用group by uid 用count(uid) 来 ...

  7. 解决mysql group by和count同时使用的问题

    例如这样一个表,我想统计email和passwords都不相同的记录的条数 CREATE TABLE IF NOT EXISTS `test_users` ( `email_id` ) unsigne ...

  8. group by 并且 count(1)的linq写法

    SELECT [MobleNo],count(1) FROM [CustMobleNo] group by [MobleNo] GO ===作用等于=== var rst = from c in da ...

  9. Thinkphp 下 MySQL group by 接count 获得条数方法

    比如 下面的语句 , 用于分组统计 select count(*) from es_diabetes where uid=43658 GROUP BY uniques 结果明显不是我们想要得,为什么呢 ...

随机推荐

  1. 第 14 章 结构和其他数据形式(names)

    *--------------------------------- names1.c -- 使用指向结构的指针 ---------------------------------*/ #includ ...

  2. Alpha冲刺报告(1/12)(麻瓜制造者)

    任务分配 这是我们在leangoo上的任务分配: 具体分工如下: 登录界面的编码:邓弘立 肖小强 浏览.检索商品:杜宏庆 汪志彬 待出售的商品: 李佳铭 江郑 数据库建表: 符天愉 刘双玉 图书捐赠模 ...

  3. [python]如何理解uiautomator里面的 child, child_by_text, sibling,及使用场景

    如何理解uiautomator里面的 child, child_by_text, sibling,我们借助android原生的uiautomatorviewer抓取的控件来进行理解 以如下图进行详细讲 ...

  4. linux ssh 应用

    linux 服务器 连接另一个linux服务器 ssh 用户名@IP地址 linux 服务器传输文件到另一个linux服务器 scp 文件名(可多个)  用户名@IP地址:传到的目录 /home

  5. python 安装opencv 安装pycocotools

    pip3 install opencv-python https://blog.csdn.net/lsh894609937/article/details/72841359 pip3 install  ...

  6. Kubernetes1.91(K8s)安装部署过程(四)--Master节点安装

    再次明确下架构:  三台虚拟机 centos 7.4系统,docker为17版本,ip为10.10.90.105到107,其中105位master,接下来的master相关组件安装到此机器上. etc ...

  7. P2176 [USACO14FEB]路障Roadblock

    题目描述 每天早晨,FJ从家中穿过农场走到牛棚.农场由 N 块农田组成,农田通过 M 条双向道路连接,每条路有一定长度.FJ 的房子在 1 号田,牛棚在 N 号田.没有两块田被多条道路连接,以适当的路 ...

  8. day70

    昨日回顾:1 虚拟环境 -1 pycharm里创建 -2 用命令串讲2 视图层: 1 Request对象---GET,POST,method,body,FILES,META,path(只是路径),ge ...

  9. 第16章 STM32中断应用概览

    第16章     STM32中断应用概览 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fi ...

  10. sql 两表更新

    UPDATE sale_origin_line set  state='cancel'  from  sale_origin p,sale_origin_line q  where p.id=q.or ...