利用MySQL统计一列中不同值的数量方法示例
前言
本文实现的这个需求其实十分普遍,举例来说,我们存在一个用户来源表,用来标记用户从哪个渠道注册进来。表结构如下所示…

其中 origin 是用户来源,其中的值有 iPhone 、Android 、Web 三种,现在需要分别统计由这三种渠道注册的用户数量。
解决方案1
| 1 2 3 4 5 6 7 8 9 | SELECTcount(*)FROMuser_operation_logWHEREorigin = 'iPhone';SELECTcount(*)FROMuser_operation_logWHEREorigin = 'Android';SELECTcount(*)FROMuser_operation_logWHEREorigin = 'Web'; | 
用 where 语句分别统计各自的数量。
这样查询的量有点多了,如果这个值有 10 个呢,那还得写 10 条相似的语句,很麻烦。
有没有一条语句就搞定的呢?于是去查了些资料。
解决方案2
我们知道 count 不仅可以用来统计行数,也能统计列值的数量,例如:
统计 user_operation_log 有多少行:
| 1 | SELECTcount(*) FROMuser_operation_log | 
统计 origin 这列值不为 NULL 的数量:
| 1 | SELECTcount(origin) FROMuser_operation_log | 
所以我们可以利用这个特性来实现上面的需求
第一种写法(用 count 实现)
| 1 2 3 4 5 | SELECT count(origin = 'iPhone'ORNULL) ASiPhone, count(origin = 'Android'ORNULL) ASAndroid, count(origin = 'Web'ORNULL)  ASWebFROMuser_operation_log; | 
查询结果

第二种写法(用 sum 实现)
| 1 2 3 4 5 | SELECT sum(if(origin = 'iPhone', 1, 0)) ASiPhone, sum(if(origin = 'Android', 1, 0)) ASAndroid, sum(if(origin = 'Web', 1, 0))  ASWebFROMuser_operation_log; | 
查询结果

第三种写法(改写 sum)
| 1 2 3 4 5 | SELECT sum(origin = 'iPhone') ASiPhone, sum(origin = 'Android') ASAndroid, sum(origin = 'Web')  ASWebFROMuser_operation_log; | 
查询结果

第四种写法(来自掘金用户 杰夫 的答案)
| 1 | SELECTorigin,count(*) num FROMuser_operation_log GROUPBYorigin; | 
查询结果

至此,已经达到了我们的需求。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
利用MySQL统计一列中不同值的数量方法示例的更多相关文章
- MySQL 查询某个列中同样值的数量统计
		数据如今是这种,我想确定出type列中的news和image....甚至以后有其它值,他们分别有多少个. SELECT type, count(1) AS counts FROM material G ... 
- excel中统计列中的值在其他列出现的次数多个条件
		excel中统计列中的值在其他列出现的次数多个条件 =COUNTIFS(E2:E373,"=VIP经销商",J2:J373,K2) 解释 E列的第二行到第373行中值 等于 VIP ... 
- Excel如何快速统计一列中相同数值出现的个数--数据透视表
		excel如何快速统计一列中相同数值出现的个数_百度经验 --这里介绍了两种解决方式,用第一种https://jingyan.baidu.com/article/9113f81b2c16822b321 ... 
- Excel 中如何快速统计一列中相同字符的个数(函数法)
		https://jingyan.baidu.com/article/6d704a132ea17328da51ca78.html 通过excel快速统计一列中相同字符的个数,如果很少,你可以一个一个数. ... 
- Excel 2010 如何快速统计一列中相同数值出现的个数  很不错
		https://jingyan.baidu.com/article/9113f81b2c16822b3214c785.html 最近经常看到论坛和百度知道的朋友提问关于“excel中如何快速统计一列中 ... 
- 【Transact-SQL】统计某字段中的值第一次出现后的2小时内出现的次数
		原文:[Transact-SQL]统计某字段中的值第一次出现后的2小时内出现的次数 table1 name createdate a 2011-03-01 10:00:00 a 2011-03-01 ... 
- python统计一个文本中重复行数的方法
		python统计一个文本中重复行数的方法 这篇文章主要介绍了python统计一个文本中重复行数的方法,涉及针对Python中dict对象的使用及相关本文的操作,具有一定的借鉴价值,需要的朋友可以参考下 ... 
- excel中使用统计列中的值在其他列出现的次数
		excel中使用统计一列的中值在其他列出现的次数 =COUNTIFS($J$:$J$,K2) 解释下 $J$2 J列中的第二行到 $J$373 J列的373行 范围内 查找 k列的第二行的值 出现的 ... 
- MySQL下concat函数中null值问题
		在mysql中,使用CONCAT(str1,str2,...)函数拼接字符串的过程中,如果你拼接的字段当中有值为null,那么拼接的结果就为null 注: select CONCAT(字段1,字段2) ... 
随机推荐
- 033_linux操作系统火焰图探测系统性能
			火焰图是定位疑难杂症的神器,比如 CPU 占用高.内存泄漏等问题.特别是 Lua 级别的火焰图,可以定位到函数和代码级别. 一.研究 https://moonbingbing.gitbooks.io/ ... 
- python批量解析域名a记录
			#encoding:utf-8 import requests import json import dns.resolver import sys reload(sys) sys.setdefaul ... 
- 在tomcat中添加虚拟主机,myeclipse中整合jdk和tomcat
			* 虚拟主机技术 ---- 在tomcat中配置 <Host> 元素 1.下载搭建tomcat中网站 --- baidu 2.在c盘 新建虚拟主机目录 baidu , 在虚拟主机目录中 ... 
- maven本地上传jar包
			maven本地上传jar包 在命令行中输入下面指令(是一行): mvn install:install-file -Dfile=D:\mvn\spring-context-support-3.1.0. ... 
- HNUOJ 13341
			题目给你一个串, 串是严格的 1 – n 的排列,里面的数是随机的 把这个串里面的数字分别输出//先预处理,对于给出的串能找到里面的最大数,再 DFS 处理 #include<iostream& ... 
- python学习第11天 迭代器
			函数的名称 闭包 迭代器 递归 
- selenium之css定位小结
			前言 大部分人在使用selenium定位元素时,用的是xpath定位,因为xpath基本能解决定位的需求.css定位往往被忽略掉了,其实css定位也有它的价值,css定位更快,语法更简洁.这一篇css ... 
- Ubuntu16.04安装MySQL
			本篇教程在示例步骤中使用了以下版本的软件.操作时,请您以实际软件版本为准. 操作系统:Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-105-generic x86_64) ... 
- Confluence 6 Home 和其他重要的目录
			Confluence 安装目录 Confluence 安装的目录(Confluence Installation directory)定义的是 Confluence 是在那里进行安装的.这个目录有时候 ... 
- leetcode(js)算法89之格雷编码
			格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异. 给定一个代表编码总位数的非负整数 n,打印其格雷编码序列.格雷编码序列必须以 0 开头 示例 1: 输入: 2 输出: [ ... 
