Mysql 获取记录总行数

做实验的表:

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)


转载于:https://my.oschina.net/prettyyjnic/blog/610451

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值