mysql获取一列中不同的值_关于MySQL统计一列中不同值的数量方法

当需要统计MySQL表中某一列的不同值及其数量时,可以使用多种方法。例如,对于用户来源表user_operation_log,可以利用COUNT函数配合条件判断统计'iPhone'、'Android'和'Web'的用户数量。方法一使用多个WHERE子句,方法二利用COUNT(origin = value OR NULL),方法三通过GROUP BY和COUNT(*)组合实现。这些技巧简化了大量相似查询的编写工作。
摘要由CSDN通过智能技术生成

需求:

举例:

存在一个用户来源表,用来标记用户从哪个渠道注册进来。

表结构如下:

456e532b1d0a21ff3357a95f7bb5a62e.png

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

解决方案一:

SELECT

COUNT(*)FROMuser_operation_logWHERE origin = 'iPhone';SELECT

COUNT(*)FROMuser_operation_logWHERE origin = 'Android';SELECT

COUNT(*)FROMuser_operation_logWHERE origin = 'Web' ;

用 where 语句分别统计各自的数量。

这样查询的量有点多了,如果这个值有 10 个呢,那还得写 10 条相似的语句,很麻烦。

解决方案二:

count 不仅可以用来统计行数,也能统计列值的数量。

例如:

统计 user_operation_log 有多少行:

SELECT count(*) FROM user_operation_log

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

SELECT count(origin) FROM user_operation_log

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

1、第一种写法(用 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;

查询结果

e35b819ea7b3ef78874eaf315b8d2eb6.png

2、第二种写法(用 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;

查询结果:

46fc509dd2595c4b8cb8494c6e26ef04.png

3、第三种写法

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

查询结果:

1e5065d3ba48185045f5956745f2b0eb.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值