MySQL中count的用法

$query="selectcount(*)astotalfromUser"中 count是什么意思astotal是什么意思... $query="select count(*) as total from User"中 count是什么意思as total是什么意思 展开
 我来答
老师小乔
2011-11-18 · TA获得超过3680个赞
知道大有可为答主
回答量:1985
采纳率:66%
帮助的人:694万
展开全部
count(*) 是计算user表中的记录条数,也就是用户数量,as total只是为了给count(*)起一个别名,为了更好的识别count(*)的意义
汐日南莘
2015-11-14 · TA获得超过1.4万个赞
知道大有可为答主
回答量:1.6万
采纳率:45%
帮助的人:7565万
展开全部
COUNT() 函数返回匹配指定条件的行数
COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入)
我们拥有下列 "Orders" 表:

O_Id OrderDate OrderPrice Customer

1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter
计算客户 "Carter" 的订单数。
SQL 语句:
SELECT COUNT(Customer) AS CustomerNilsen FROM Orders
WHERE Customer='Carter'

以上 SQL 语句的结果是 2,因为客户 Carter 共有 2 个订单:
CustomerNilsen
2
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wufengqiang
2011-11-24
知道答主
回答量:27
采纳率:0%
帮助的人:10.6万
展开全部
count(*) as total
相当于给count(*)取了一个别名,到时访问的时候可以直接访问这个别名
count(*)
是统计user表的记录条数,但是他不去重且如果为空的记录也会被当作一条记录
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cj17909
2011-11-18
知道答主
回答量:53
采纳率:0%
帮助的人:22.2万
展开全部
count是什么意思,有多少记录数。
as total,记录数结果集 指定列名为 total,这样就可以调用此列。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
爱可生云数据库
2020-06-09 · MySQL开源数据库领先者
爱可生云数据库
爱可生,金融级开源数据库和数据云服务整体解决方案提供商;优秀的开源数据库技术,企业级数据处理技术整体解决方案提供商;私有云数据库云服务市场整体解决方案提供商。
向TA提问
展开全部

我们知道,MySQL 一直依赖对 count(*) 的执行很头疼。很早的时候,MyISAM 引擎自带计数器,可以秒回;不过 InnoDB 就需要实时计算,所以很头疼。以前有多方法可以变相解决此类问题,比如:
1. 模拟 MyISAM 的计数器比如表 ytt1,要获得总数,我们建立两个触发器分别对 insert/delete 来做记录到表 ytt1_count,这样只需要查询表 ytt1_count 就能拿到总数。ytt1_count 这张表足够小,可以长期固化到内存里。不过缺点就是有多余的触发器针对 ytt1 的每行操作,写性能降低。这里需要权衡。


2. 用 MySQL 自带的 sql_calc_found_rows 特性来隐式计算

依然是表 ytt1,不过每次查询的时候用 sql_calc_found_rows 和 found_rows() 来获取总数,比如:

  • 1 row in set, 1 warning (0.00 sec)

  • 这样的好处是写法简单,用的是 MySQL 自己的语法。缺点也有,大概有两点:1. sql_calc_found_rows 是全表扫。2. found_rows() 函数是语句级别的存储,有很大的不确定性,所以在 MySQL 主从架构里,语句级别的行级格式下,从机数据可能会不准确。不过行记录格式改为 ROW 就 OK。所以最大的缺点还是第一点。

  • 从 warnings 信息看,这种是 MySQL 8.0 之后要淘汰的语法。

    3. 从数据字典里面拿出来粗略的值


    那这样的适合新闻展示,比如行数非常多,每页显示几行,一般后面的很多大家也都不怎么去看。缺点是数据不是精确值。

    4. 根据表结构特性特殊的取值

  • 这里假设表 ytt1 的主键是连续的,并且没有间隙,那么可以直接  mysql> select max(id) as cnt from ytt1;    +------+    | cnt  |    +------+    | 3072 |    +------+    1 row in set (0.00 sec)


  • 不过这种对表的数据要求比较高。


    5. 标准推荐取法(MySQL 8.0.17 建议)

  • MySQL 8.0 建议用常规的写法来实现。

  • 第五种写法是 MySQL 8.0.17 推荐的,也就是说以后大部分场景直接实时计算就 OK 了。MySQL 8.0.17 以及在未来的版本都取消了sql_calc_found_rows 特性,可以查看第二种方法里的 warnings 信息。相比 MySQL 5.7,8.0 对 count(*) 做了优化,没有必要在用第二种写法了。我们来看看 8.0 比 5.7 在此类查询是否真的有优化?MySQL 5.7

  • 请点击输入图片描述

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式