首页 > 数据库 >MySQL统计一个列中不同值的数量

MySQL统计一个列中不同值的数量

时间:2022-12-05 11:33:48浏览次数:103  
标签:origin count log 列中 SELECT user MySQL operation 统计


​ https://yiqiwuliao.com/post/mysql/mysqltong-ji-yi-ge-lie-zhong-bu-tong-zhi-de-shu-liang ​​​
mySQL 统计一个列中不同值的数量
这个需求其实十分普遍,举例来说,我们存在一个用户来源表,用来标记用户从哪个渠道注册进来。表结构如下所示...
[img]https://img.yiqiwuliao.com/user_operation_log.png[/img]
其中 origin 是用户来源,其中的值有 iPhone 、Android 、Web 三种,现在需要分别统计由这三种渠道注册的用户数量。
解决方案1

SELECT count(*)
FROM user_operation_log
WHERE origin = 'iPhone';

SELECT count(*)
FROM user_operation_log
WHERE origin = 'Android';

SELECT count(*)
FROM user_operation_log
WHERE origin = 'Web';
用 where 语句分别统计各自的数量。
这样查询的量有点多了,如果这个值有 10 个呢,那还得写 10 条相似的语句,很麻烦。
有没有一条语句就搞定的呢?于是去查了些资料。
解决方案2

我们知道 count 不仅可以用来统计行数,也能统计列值的数量,例如:
统计 user_operation_log 有多少行:
SELECT count(*) FROM user_operation_log
统计 origin 这列值不为 NULL 的数量:
SELECT count(origin) FROM user_operation_log
所以我们可以利用这个特性来实现上面的需求
第一种写法(用 count 实现)

SELECT
count(origin = 'iPhone' OR NULL) AS iPhone,
count(origin = 'Android' OR NULL) AS Android,
count(origin = 'Web' OR NULL) AS Web
FROM user_operation_log;
查询结果
search_result
第二种写法(用 sum 实现)

SELECT
sum(if(origin = 'iPhone', 1, 0)) AS iPhone,
sum(if(origin = 'Android', 1, 0)) AS Android,
sum(if(origin = 'Web', 1, 0)) AS Web
FROM user_operation_log;

SELECT
sum(origin = 'iPhone') AS iPhone,
sum(origin = 'Android') AS Android,
sum(origin = 'Web') AS Web
FROM user_operation_log;

第4种,最优的:
SELECT origin,count(*) num FROM user_operation_log GROUP BY origin;

标签:origin,count,log,列中,SELECT,user,MySQL,operation,统计
From: https://blog.51cto.com/u_14230175/5911661

相关文章

  • MYSQL 的审计日志插件
    MYSQL的审计日志插件,可惜目前只是LINUX用:来自McAfee的MySQL插件,为MySQL提供审计功能,重点是安全性和审计要求。该插件可以用作独立的审核解决方案,也......
  • mysql 5.7中关于count(*)的优化
    在mysql5.7中,对于selectcount(*)fromtable的优化,可以设置为:selectcount(*)fromtablewhereuid>0其中uid为辅助索引,辅助索引不存放数据......
  • mysql版本区别及版本号解释
    mysql版本区别及版本号解释1.mysql类型mysqlcommunityserver,社区免费版,但没有技术支持mysqlenterprise,企业收费版mysqlcluster,主要用于服务器集群mysqlworkbench,用来......
  • (译)MySQL中的直方图统计信息
    什么是直方图,在MySQL8.0.3如何创建直方图?MySQL的直方图是如何影响执行计划生成的?创建直方图有哪些注意事项?直方图和索引对优化器的选择上有什么差异,又该如何选择?如何判断......
  • mysql中的case语句
    1。selectname,casewhenbirthday<'1981'then'old'whenbirthday>'1988'then'yong'else'ok'ENDYORNfromlee;2。selectNA......
  • MySQL记录用户操作日志
    MySQL记录用户操作日志有时,我们想追踪某个数据库操作记录,如想找出是谁操作了某个表(比如谁将字段名改了)。二进制日志记录了操作记录,线程号等信息,但是却没有记录用户信息,因此......
  • Navicat中MySQL命令列界面操作及基础常用命令
    https://blog.csdn.net/weixin_71712767/article/details/126863842如何使用navicat进入MySQL命令行界面?如何通过命令对数据库/表进行操作? 如何在Navicat中MySQL链接打......
  • 连接mysql报错 errorCode 1129, state HY000, Host ‘xxx‘ is blocked because of ma
    https://copyfuture.com/blogs-details/202206101947537199错误原因:mysql设定了单个客户端最大连接失败次数,超过后便无法再连接成功.可命令行查看:最大失败数为100.......
  • (转)mysqldump意外原因
    mysqldump是非常重要的MySQL备份工具。然而在长年累月的使用过程中,TAOBAO多次出现了因mysqldump意外终止而导致备份失败的情况。以下是我们经常遇到......
  • mysql 5.6中关于innodb_stats_on_metadata
    在mysql5.6中,innodb_stats_on_metadata默认是关闭了这个会对INFORMATION_SCHEMA中的一些表进行查询操作,以方便索引统计信息,如果读要求高的建议关闭,见......