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. VS2008 开发wince程序设备调试

    今天之前开发的一个wince程序,用户反馈报错,由于很久没玩了,从用户那里拿来设备.结果怎么调试的忘记了.在网上找了些资料,自己有摸索了一下.才搞定. 1.安装Microsoft ActiveSync ...

  2. November 04th, 2017 Week 44th Saturday

    It does not do to dwell on dreams and forget to live. 整天沉溺于梦想而忘记如何好好生活,毫无意义. Bingo, and I think it i ...

  3. SDN 第二次上机作业

    SDN第二次上机作业 1.控制器floodlight所示可视化图形拓扑的截图,及主机拓扑连通性检测截图 拓扑 连通性 2.利用字符界面下发流表,使得'h1'和'h2' ping 不通 流表截图 连通性 ...

  4. Python3编写网络爬虫03-正则表达式的使用

    一.正则表达式(处理字符串强大的工具,有特定的语法结构)功能:实现字符串的检索,替换,匹配验证实例: 地址:http://tool.oschina.net/regex/ #测试文本Hello,my p ...

  5. 元素视差方向移动jQuery插件-类似github 404页面效果

    原文地址:http://www.xuanfengge.com/shake.html 前言: 视差滚动,大家也许并不陌生.但是对于视差方向移动,你是否有见过效果呢?看官请进来瞧瞧~ demo : 轩枫阁 ...

  6. 使用mysql乐观锁解决并发问题思路

    本文摘自网络,仅供个人学习之用 案例说明: 银行两操作员同时操作同一账户.比如A.B操作员同时读取一余额为1000元的账户,A操作员为该账户增加100元,B操作员同时为该账户扣除50元,A先提交,B后 ...

  7. Qt入门之基础篇 ( 一 ) :Qt4及Qt5的下载与安装

    转载请注明出处:CN_Simo. 导语: Qt是一个跨平台的C++图形界面应用程序框架.它提供给开发者建立图形用户界面所需的功能,广泛用于开发GUI程序,也可用于开发非GUI程序.Qt很容易扩展,并且 ...

  8. java通过反射调用有参数的方法

    public static void eachCfg(Class Initclass,String taskType){ Field[] fields = Initclass.getDeclaredF ...

  9. jmeter接口测试4-使用数据库mysql构造参数

    jmeter测试中,测试数据一般和测试用例分离 测试数据一般可以使用csv构造,进行参数化 但也可以使用mysql等数据库构造 方案一:一个线程循环调用mysql数据,不是并发,不适用于性能测试,更适 ...

  10. Android实现导航菜单随着ListView联动,当导航菜单遇到顶部菜单时停止在哪里,并且listview仍能滑动

    需求:现要实现一个特殊UI的处理,如下图所示: 该布局的上面是一个“按钮”,中间是一个“空白布局(当然也可以是ViewPager等)”,下面是一个页面的导航菜单,底部是一个ListView. 要求:滑 ...