使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT_php技巧

例如这样一个表,我想统计email和passwords都不相同的记录的条数

复制代码 代码如下:

CREATE TABLE IF NOT EXISTS `test_users` (
`email_id` int(11) unsigned NOT NULL auto_increment,
`email` char(100) NOT NULL,
`passwords` char(64) NOT NULL,
PRIMARY KEY (`email_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;

INSERT INTO `test_users` (`email_id`, `email`, `passwords`) VALUES
(1, ‘jims@gmail.com', ‘1e48c4420b7073bc11916c6c1de226bb'),
(2, ‘jims@yahoo.com.cn', ‘5294cef9f1bf1858ce9d7fdb62240546′),
(3, ‘default@gmail.com', ‘5294cef9f1bf1858ce9d7fdb62240546′),
(4, ‘jims@gmail.com', ”),
(5, ‘jims@gmail.com', ”);

通常我们的做法是这样

复制代码 代码如下:

SELECT COUNT(*) FROM test_users WHERE 1 = 1 GROUP BY email,passwords

这样的结果是什么呢?

复制代码 代码如下:

COUNT(*)
1
2
1
1

显然这不是我要的结果,这样统计出来的是相同email和passwords的各个记录数量之和,下面这样就可以了

复制代码 代码如下:

SELECT COUNT(DISTINCT email,passwords) FROM `test_users` WHERE 1 = 1

当然在php里面也可以用mysql_num_rows来获取记录的条数,但是这样的效率不高,可以参考这篇文章
mysql_num_rows VS COUNT 效率问题分析

时间: 2024-11-03 12:50:31

使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT_php技巧的相关文章

mysql 按字段统计记录条数

问题描述 我需要做的是: 举个例子:表A中有一列为bank,其中存放的是1.2.3.4...等等... 然后要统计出该表bank为1时的记录条数,bank为2时的记录条数...以此类推.... 但是bank列的存放的数据可能是变化的...比如某一天里面又出现了10.... 谢谢! 解决方案 select count(bank) from table group by bank解决方案二:select count(*) from 表 where bank=1 select count(*) fro

用于查询当前数据库中所有表格的记录条数的脚本

脚本|数据|数据库 --==========================================================================-- 说明: 本脚本用于查询当前数据库中所有表格的记录条数--   并将结果存入TableInfo表中,不会删除以备用户再做处理与分析--   不过,最后请用户删除此表.--========================================================================== if

PHP查询数据库中满足条件的记录条数(两种实现方法)_php实例

在需要输出网站用户注册数,或者插入数据之前判断是否有重复记录的时候,就需要获取满足条件的MySQL查询的记录数目. 第一种方法:查询时候直接统计 复制代码 代码如下: $sql="SELECT COUNT(*) AS count FROM TABLE WHERE id='$id'"; $result=mysql_fetch_array(mysql_query($sql)); $count=$result['count']; 第二种方法:先取出,后统计 复制代码 代码如下: $sql=&

Lucene如何获得索引列表及每个索引对应的记录条数(类似于google的自动提示)

问题描述 需要做一个自动提示的搜索引擎,当输入一个关键字时就能查找到与输入相关的全部关键字,并能获取它们所对应的总记录数.请问Lucene能否实现这样的功能? 解决方案 网上有很多这样的资讯比如实现类用Lucene PrefixQuery 来实现 Google Suggest 的功能的一种简单方法

sql统计表中所有数据记录条数

最近公司的数据库发现有表的数据被弄掉了,有些数据表记录为0,于是想找出此数据库中到底有哪些数据表的记录都为0以缩小分析范围,可使用如下的SQL Statement:   代码如下 复制代码 CREATE TABLE #tmptb(tbname sysname,tbrows int  ,tbREserved varchar(10),tbData varchar(10)  ,tbIndexSize varchar(10),tbUnUsed varchar(10))  INSERT INTO #tmp

关于使用ExecuteScalar获得记录条数导致连接池爆掉的问题,求助。

问题描述 这是写的一个求表中纪录的函数,我在代码中大概调用了20次,另外还有30个左右的查询,只要多刷新几次页面就会出错,数据库显示连接数到最大.请问下这样写有没有什么问题? 解决方案 解决方案二:using(varsqlCnn=new....){............}要写到using{}结构中.解决方案三:你的connection的关闭为啥要注销掉?解决方案四:close啊解决方案五:感谢大家,这个函数没有用了,现在换了别的方法来实现,估计是刷新的时候连接池没有释放资源导致的解决方案六:s

mysql获取group by的总记录行数另类方法_Mysql

mysql获取group by内部可以获取到某字段的记录分组统计总数,而无法统计出分组的记录数. mysql的SQL_CALC_FOUND_ROWS 使用 获取查询的行数 在很多分页的程序中都这样写: 代码如下 SELECT COUNT(*) from `table` WHERE ......; 查出符合条件的记录总数 代码如下 SELECT * FROM `table` WHERE ...... limit M,N; 查询当页要显示的数据 这样的语句可以改成: 代码如下 SELECT SQL_

mysql获取group by的总记录行数方法

mysql获取group by内部可以获取到某字段的记录分组统计总数,而无法统计出分组的记录数. mysql的SQL_CALC_FOUND_ROWS 使用 获取查询的行数 在很多分页的程序中都这样写:  代码如下 复制代码 SELECT COUNT(*) from `table` WHERE ......;   查出符合条件的记录总数    代码如下 复制代码 SELECT * FROM `table` WHERE ...... limit M,N; 查询当页要显示的数据 这样的语句可以改成:

select-数据库如何在查询出记录的同时,统计记录有多少行

问题描述 数据库如何在查询出记录的同时,统计记录有多少行 例如:select u.userId from user as u where u.userId<500,能否在查询的同时获取到记录的行数? 解决方案 select userId,count(userId) from user where userId<500 解决方案二: select u.userId,count(1) count from user as u where u.userId<500 count 列代表你查询出来