文档章节

Mysql 获取记录总行数

yjnic
 yjnic
发布于 2016/01/27 16:12
字数 408
阅读 119
收藏 0

做实验的表:

MariaDB [test]> select * from prefix_user;
+---------+-----------+-----+-------+
| user_id | username  | age | email |
+---------+-----------+-----+-------+
|       2 | username2 |   2 |  NULL |
|       3 | username3 | 111 |     1 |
|       4 | username3 |  10 |     1 |
|       5 | username3 |  10 |  NULL |
|       6 | username3 |  10 |  NULL |
+---------+-----------+-----+-------+
5 rows in set (0.01 sec)

一般情况:

    直接用count() 函数

select count(*) from 表 where 条件;

   或者

select count(主键) from 表 where 条件;

  其中主键和*的区别主要是: * 会统计 null 的行,   

select count(*) from prefix_user where 1; // 5行
select count(email) from prefix_user ;// 2行,忽略了值为null的

当和group by 混用的时候, count() 函数返回的结果是group by之后的结果,例如    

MariaDB [test]> select count(*) from prefix_user group by age;
+----------+
| count(*) |
+----------+
|        1 |
|        3 |
|        1 |
+----------+
3 rows in set (0.01 sec)

如果我们想获取总共有多少个年龄不同的行数,有两种解决方案,

第一种, 使用子语句

select count(*) from ( select count(*) from prefix_user group by age) as a;// 结果为3

第二种, 使用 FOUND_ROWS 函数, 这个函数返回的结果是上一个查询去掉limit 限制的行数,( 有文章说 如果上一个查询含有 SQL_CALC_FOUND_ROWS 和没有 SQL_CALC_FOUND_ROWS 关键字在有limit的时候返回的结果可能不一样, 但是我做实验重现不了,希望读者知道理由可以留言)

// 不使用 SQL_CALC_FOUND_ROWS
MariaDB [test]> select count(*) from prefix_user group by age limit 2;
+----------+
| count(*) |
+----------+
|        1 |
|        3 |
+----------+
2 rows in set (0.00 sec)

MariaDB [test]> SELECT FOUND_ROWS();
+--------------+
| FOUND_ROWS() |
+--------------+
|            3 |
+--------------+
1 row in set (0.00 sec)


// 使用 SQL_CALC_FOUND_ROWS 关键字

MariaDB [test]> select SQL_CALC_FOUND_ROWS count(*) from prefix_user group by age limit 2;
+----------+
| count(*) |
+----------+
|        1 |
|        3 |
+----------+
2 rows in set (0.00 sec)

MariaDB [test]> SELECT FOUND_ROWS();
+--------------+
| FOUND_ROWS() |
+--------------+
|            3 |
+--------------+
1 row in set (0.00 sec)


© 著作权归作者所有

yjnic
粉丝 0
博文 9
码字总数 4333
作品 0
程序员
私信 提问
MySQL · myrocks · myrocks统计信息

概述 mysql查询优化主要是在代价统计分析的基础上进行的。合理的代价模型和准确的代价统计信息决定了查询优化的优劣。myrocks基于mysql5.6, 目前的代价模型依赖的主要因素是IO和CPU,mysql5....

阿里云RDS-数据库内核组
2016/12/03
0
0
影响LIMIT子句使用的一个mysql配置项

select FOUNDROWS()总是返回上一次select所返回的行数。它的结果受到上一次select中是否使用SQLCALCFOUNDROWS的 影响 测试如下: 1.运行语句:select SQLCALCFOUND_ROWS * from penalties w...

wangtaotao
2011/02/25
0
0
MySQL InnoDB count()函数

1. 系统版本 MySQL 5.7.25,Ubuntu 16.04 2. count()函数 2.1 count(*) count(*)用于计算数据表的行数。 2.1.1 MyISAM实现方式 MyISAM将数据表的总行数存储在磁盘,当有sql语句调用count(*)时...

songbill
02/12
0
0
mysql的count(*)的优化,获取千万级数据表的总行数

一、前言 这个问题是今天朋友提出来的,关于查询一个1200w的数据表的总行数,用count(*)的速度一直提不上去。找了很多优化方案,最后另辟蹊径,选择了用explain来获取总行数。 二、关于count...

凯文加内特
02/15
0
0
如何使用简单的 SQL 查询在 MySQL 中计算中位数

什么是中位数? 数值型数组的中位数是在数据排序后位于数组中间项的值。如果数组有偶数个元素,中位数就是最中间的两个数值的平均数。 中位数对于了解“我的值是否位于中间?”非常有用。比如...

oschina
2017/09/28
3.3K
3

没有更多内容

加载失败,请刷新页面

加载更多

Java的战争

本文来自微信公众号: 金捷幡(ID:jin-jiefan) ,作者:金捷幡,封面:拉里·埃里森(东方IC) 2019年5月,彻底撕破脸的特朗普掀起对华为的战争,谷歌被迫吊销了华为的Android授权。开源软...

Java领航员
今天
6
0
超详细的LM3414MRX/NOPB规格参数介绍就在这里

超详细的LM3414MRX/NOPB规格参数介绍就在这里 描述 LM3414和LM3414MRX/NOPB是具有1-A 60 W(1)共阳极功能的恒流降压LED驱动器。它们适用于驱动单串3-W HBLED,效率高达96%。它们可接受4.5...

不能吃肉的仙女
今天
3
0
Eclipse国内镜像源配置方法

Table of Contents 我们在国内从官网下载Eclipse以及插件非常慢,那么,有没有方法变快呢? 有,那就是使用国内的公开镜像源替换官方源。 1 下载Eclipse 首先,我们看一个链接地址: http:/...

求神
今天
7
0
java 请求服务

一.第一种基于java web http 请求服务,必须用tomcat 容器启动才能对外提供服务 在maven 工程中pox 文件导入jar <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>h......

zaolonglei
今天
6
0
HDFS工作机制——自开发分布式数据采集系统

需求描述: 在业务系统的服务器上,业务程序会不断生成业务日志(比如网站的页面访问日志) 业务日志是用log4j生成的,会不断地切出日志文件,需要定期(比如每小时)从业务服务器上的日志目...

须臾之余
今天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部