group by 和count的联合使用问题 [转]
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的联合使用问题 [转]的更多相关文章
- linq to sql (Group By/Having/Count/Sum/Min/Max/Avg操作符)
Group By/Having操作符 适用场景:分组数据,为我们查找数据缩小范围. 说明:分配并返回对传入参数进行分组操作后的可枚举对象.分组:延迟 1.简单形式: var q = from p in ...
- linq to sql (Group By/Having/Count/Sum/Min/Max/Avg操作符) (转帖)
http://wenku.baidu.com/link?url=2RsCun4Mum1SLbh-LHYZpTmGFMiEukrWAoJGKGpkiHKHeafJcx2y-HVttNMb1BqJpNdw ...
- 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 ...
- [转]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操作符 适用场景:分组数据, ...
- group by 和count 联合使用问题
工作中要根据用户发布的产品数量来排序做分页,使用group by uid 用count(uid) 来统计的数量和想要的数量不正确. count统计的数量是被group by 分组以后每一组中数据的数量 ...
- group by和count联合使用问题
要根据用户发布的产品数量来排序做分页,使用group ) FROM( SELECT uid,COU 工作中要根据用户发布的产品数量来排序做分页,使用group by uid 用count(uid) 来 ...
- 解决mysql group by和count同时使用的问题
例如这样一个表,我想统计email和passwords都不相同的记录的条数 CREATE TABLE IF NOT EXISTS `test_users` ( `email_id` ) unsigne ...
- group by 并且 count(1)的linq写法
SELECT [MobleNo],count(1) FROM [CustMobleNo] group by [MobleNo] GO ===作用等于=== var rst = from c in da ...
- Thinkphp 下 MySQL group by 接count 获得条数方法
比如 下面的语句 , 用于分组统计 select count(*) from es_diabetes where uid=43658 GROUP BY uniques 结果明显不是我们想要得,为什么呢 ...
随机推荐
- 【转】为什么Github没有记录你的Contributions
【转】为什么Github没有记录你的Contributions 字数985 阅读0 评论0 喜欢0 记录下为什么github 提交的时候,没有记录到 github 的那个日历上。 Paste_Imag ...
- JFreeChart绘制XY折线图(工具类设计)
准备用Java写通信的仿真平台作为毕业设计,相比matlab绘图,Java绘图需要自己去写很多工具类,博主在这采用了JFreeChart的开源解决方案,摸索着自己写了一个XY折线图工具类,话不多说贴源 ...
- Hadoop YARN简介
背景 本文整理一些Hadoop YARN的相关内容. 简介 YARN(Yet Another Resource Negotiator)是Hadoop通用资源管理平台,为各类计算框架(离线MR.在线St ...
- Spring之Method Injection
对于Spring的多数用户而言,主要的Bean存在形式都是单例,当一个单例需要结合另一个单例协作或者一个非单例与另一个非单例协作时,典型的做法是通过属性的形式注入,但是当两个Bean的声明周期不同时候 ...
- oracle查询父节点及其下所有子节点
1.我们的组织机构就是这种树形菜单的格式. . 2.执行sql: select ( select organization_name from SYS_ORGANIZATION where organ ...
- windows安装wget
windows安装wget1. 下载wget-1.11.4-1-setup.exehttps://jaist.dl.sourceforge.net/project/gnuwin32/wget/1.11 ...
- Kafka设计解析(二十三)关于Kafka监控方案的讨论
转载自 huxihx,原文链接 关于Kafka监控方案的讨论 目前Kafka监控方案看似很多,然而并没有一个“大而全”的通用解决方案.各家框架也是各有千秋,以下是我了解到的一些内容: 一.Kafka ...
- Android String.xml中的符号总结
<b></b>加粗字体 <i></i> 斜体字体 <u></u> 给字体加下划线 \n 换行 \u0020表示空格 \u2026 ...
- Android向手机通讯录中的所有的联系人(包括SIM卡),向手机通讯录中插入联系人
package com.example.myapi.phonepersion; import java.util.ArrayList; import java.util.List; import an ...
- Kubernetes哪一点最打动你?或者,它发布过的哪一项特性让你认为最厉害?
kubernates 打动我的地方应该是他解决了docker 的一个痛点,各个docker之间的通信以及集成管理.因为这跟微服务很像,微服务之间也是需要通信和统一管理.知识总是相同的,在这里就体现出来 ...