利用MySQL统计一列中不同值的数量方法示例

前言

本文实现的这个需求其实十分普遍,举例来说,我们存在一个用户来源表,用来标记用户从哪个渠道注册进来。表结构如下所示…

其中 origin 是用户来源,其中的值有 iPhone 、Android 、Web 三种,现在需要分别统计由这三种渠道注册的用户数量。

解决方案1

?


1

2

3

4

5

6

7

8

9

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 有多少行:

?


1

SELECT count(*) FROM user_operation_log

统计 origin 这列值不为 NULL 的数量:

?


1

SELECT count(origin) FROM user_operation_log

所以我们可以利用这个特性来实现上面的需求

第一种写法(用 count 实现)

?


1

2

3

4

5

SELECT

 count(origin = ‘iPhone‘ OR NULL) AS iPhone,

 count(origin = ‘Android‘ OR NULL) AS Android,

 count(origin = ‘Web‘ OR NULLAS Web

FROM user_operation_log;

查询结果

第二种写法(用 sum 实现)

?


1

2

3

4

5

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;

查询结果

第三种写法(改写 sum)

?


1

2

3

4

5

SELECT

 sum(origin = ‘iPhone‘) AS iPhone,

 sum(origin = ‘Android‘) AS Android,

 sum(origin = ‘Web‘AS Web

FROM user_operation_log;

查询结果

第四种写法(来自掘金用户 杰夫 的答案)

?


1

SELECT origin,count(*) num FROM user_operation_log GROUP BY origin;

查询结果

至此,已经达到了我们的需求。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

时间: 2024-07-29 02:46:26

利用MySQL统计一列中不同值的数量方法示例的相关文章

MySQL 查询某个列中相同值的数量统计

数据现在是这样的,我想确定出type列中的news和image....甚至以后有其他值,他们分别有多少个. SELECT type, count(1) AS counts FROM material GROUP BY type count(1),代表统计第一列,写上1 比写 *的效率高! 版权声明:本文为博主原创文章,未经博主允许不得转载.

MySQL 查询某个列中同样值的数量统计

数据如今是这种,我想确定出type列中的news和image....甚至以后有其它值,他们分别有多少个. SELECT type, count(1) AS counts FROM material GROUP BY type count(1),代表统计第一列.写上1 比写 *的效率高!

SQL SERVER 中在自动增长列中插入值

如果想在自动增长列中插入值,如果没有设置 IDENTITY_INSERT 为 ON 的话会出现如下错误 当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'dbo.table' 中的标识列插入显式值. 解决问题的办法是: SET IDENTITY_INSERT [TableName] ON 在插入完成以后可以通过: SET IDENTITY_INSERT [TableName] OFF 关闭 IDENTITY_INSERT

Excel 2010 如何快速统计一列中相同数值出现的个数

https://jingyan.baidu.com/article/9113f81b2c16822b3214c785.html 最近经常看到论坛和百度知道的朋友提问关于"excel中如何快速统计一列中相同数值出现的个数",看来这是个普遍问题.所以,笔者单独写一篇经验分享一下该问题的快速解决方案.数据如下图,A2:A51为人名数据,有重复,需统计每个人出现了多少次. 工具/原料 Excel 数据透视表解决方案: 1 首先,选中A1:A51的数据范围,选择[插入]-[数据透视表]. 2 按

【Transact-SQL】统计某字段中的值第一次出现后的2小时内出现的次数

原文:[Transact-SQL]统计某字段中的值第一次出现后的2小时内出现的次数 table1 name createdate a 2011-03-01 10:00:00 a 2011-03-01 11:00:00 a 2011-03-01 14:00:00 b 2011-03-01 13:00:00 b 2011-03-01 13:20:00 b 2011-03-01 14:00:00 查询结果为 name createdate count a 2011-03-01 10:00:00 2 a

神经网络中权值初始化的方法

from:http://blog.csdn.net/u013989576/article/details/76215989 权值初始化的方法主要有:常量初始化(constant).高斯分布初始化(gaussian).positive_unitball初始化.均匀分布初始化(uniform).xavier初始化.msra初始化.双线性初始化(bilinear) 常量初始化(constant) 把权值或者偏置初始化为一个常数,具体是什么常数,可以自己定义 高斯分布初始化(gaussian) 需要给定

SQL——处理列中NULL值

处理NULL值 - 数据库中某列为NULL值,使用函数在列值为NULL时返回固定值.    SQLServer:ISNULL(col,value)        示例:SELECT ISNULL(col,value) FROM tableName    Oracle:NVL(col,value)        示例:SELECT NVL(col,value) FROM tableName    MySQL:IFNULL(col,value).COALESCE(col,value)       

ArcMap - 使用python更新列中的值

概述:在外文网上,很多人都问在ArcMap中如何通过SQL修改属性字段的值,我见回答的人都说通过"Field Calculator",貌似不能直接通过SQL语句. 虽然学gis开发,但是还是第一次碰python,有点编程经验,所以感觉还是很容易入门的. 步骤: 1,首先在Attribute Table中通过"Table Options" -> "Add Field",创建一个字段. 2,在列(字段)的名称上,右键,选择"Field

mysql统计同一个表中的不同条件下的个数

想要同时统计男生数量和不及格数量.SELECT COUNT(1) AS boyNum FROM t_student WHERE sex='男'; SELECT COUNT(1) AS poorNum FROM t_student WHERE score<'60'; 失败的尝试:SELECT COUNT(sex='男') AS boyNum, COUNT(score<'60') AS poorNum FROM t_student; 解决方法:mysql提供if函数,可以在查询是使用.SELECT