`

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

 
阅读更多
https://yiqiwuliao.com/post/mysql/mysqltong-ji-yi-ge-lie-zhong-bu-tong-zhi-de-shu-liang

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

其中 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;
分享到:
评论

相关推荐

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

    在MySQL数据库中,统计一列中不同值的数量是一项常见的数据查询任务,特别是在数据分析和报表生成时。本篇文章将深入探讨几种不同的方法来实现这一目标,这些方法适用于多种情况,无论是一小部分特定值的计数还是对...

    如何使用MySQL查询某个列中相同值的数量统计

    数据现在是这样的,我想确定出type列中的... 您可能感兴趣的文章:MySQL 统计查询实现代码MYSQL中有关SUM字段按条件统计使用IF函数(case)问题利用MySQL统计一列中不同值的数量方法示例单个select语句实现MySQL查询统计次

    mysql查询根据列按条件统计总数

    - 使用子查询`b`来统计`t1`表中满足条件的每一组`列1`的数量以及对应的`列2`和`列3`的值。 - 使用`UNION`操作符将子查询`b`的结果与另一个统计查询合并。 - 最后一个查询计算`t2`表中`列1`的数量,并将结果与其他...

    mysql 统计一天24小时数据默认补0SQL

    2. **统计每个小时的登录次数**:接着,我们需要从 `tb_log_login` 表中统计2018年1月18日这一天内每个小时的登录次数。这里使用 `HOUR` 函数来获取 `login_time` 的小时部分,并用 `GROUP BY hours` 来分组统计数据...

    mysql存储过程之返回多个值的方法示例

    首先,我们要明白在MySQL中,存储函数只能返回一个单一的值,而存储过程则可以处理更复杂的情况,包括返回多个值。要实现这一功能,我们需要使用INOUT或OUT参数。IN参数用于向存储过程传递输入值,而出参(OUT或IN...

    mysql-行转列、列转行

    假设我们有一个人口统计数据表,包含年龄组和人口数量,要将这些列转换为每行记录年龄和对应的数量,可以这样做: ```sql SELECT 'Age_10-20' AS age_group, population_10_20 AS population FROM population_data...

    mysql 查询表中多少个字段

    在MySQL数据库中,了解一个表包含多少个字段是非常重要的基础操作之一。这不仅有助于数据库管理员更好地管理数据结构,还能够帮助开发人员更准确地编写SQL查询语句。本文将详细介绍如何使用MySQL来查询表中的字段...

    mysql中distinct用法【SQL中distinct的用法】.docx

    MySQL 中的 DISTINCT 关键字用于返回唯一不同的值,避免重复值的出现。当我们在查询表中数据时,可能会遇到重复值的情况,这时使用 DISTINCT 关键字可以帮助我们返回唯一的值。 DISTINCT 的基本用法 DISTINCT ...

    诗词诗人数据库,mysql文件

    总的来说,这个“诗词诗人数据库”借助MySQL的强大功能,将海量的诗词文献进行了有效的整理和存储,不仅方便了数据的管理和检索,也为广大诗词爱好者提供了一个便捷的平台,让他们能更深入地探索中国传统文化的瑰宝...

    mysql数据库中检索信息

    在MySQL中,可以使用`COUNT()`函数来统计满足某些条件的记录数量。 ##### 统计所有记录数 例如,统计`tableone`表中的所有学生数: ``` SELECT COUNT(*) FROM tableone; ``` ##### 分组统计 还可以结合`GROUP ...

    MySQL中show命令方法得到表列及整个库的详细信息(精品珍藏)

    `Non_unique`表示索引是否唯一,`Key_name`是索引的名称,`Seq_in_index`是索引中的列位置,`Column_name`是索引的列名,`Cardinality`是索引中不同值的数量,而`Collation`和`Sub_part`分别描述了列在索引中的排序...

    全国学校数据表格加mysql数据库.rar

    在这个场景中,我们看到一个关于全国学校信息的压缩包文件,名为“全国学校数据表格加mysql数据库.rar”,它包含了对我国高等教育机构的详细统计。描述中提到,全国共有3005所高等学校,分为普通高校和成人高校两...

    浅析MySQL的基数统计

    Cardinality指的就是MySQL表中某一列的不同值的数量。 如果这一类是唯一索引,那基数 = 行数。 如果这一列是sex,枚举类型只有男女,那它是基数就是2 Cardinality越高,列就越有成为索引的价值。MySQL执行计划也会...

    求数据库表中列的个数

    在数据库管理与应用的过程中,了解一个表中的列数是非常重要的基础操作之一。这不仅可以帮助我们更好地理解表结构,还能在进行数据迁移、表结构对比等任务时提供必要的信息支持。根据给定的信息:“求数据库表中列的...

    Mysql的数据集 Mysql的数据集 Mysql的数据集

    MySQL 数据集是数据库管理系统中一个重要的概念,它指的是在 SQL 查询语句中形成的临时或永久性的数据集合。在本篇文章中,我们将深入探讨 MySQL 数据集的相关知识点,包括数据集的生成、操作以及优化策略。 首先,...

    Java实现获得MySQL数据库中所有表的记录总数可行方法

    在Java编程中,获取MySQL数据库中所有表的记录总数是一个常见的需求,特别是在数据分析或者性能监控场景下。本文将介绍两种有效的方法来实现这一目标,通过编写Java程序与MySQL数据库进行交互。 首先,我们需要确保...

    MySQL 是怎样运行的:从根儿上理解 MySQL(上).pdf

    MySQL是一种流行的开源关系型数据库管理系统,它以其高效、可靠和易于使用的特点被广泛应用于各种规模的应用中。要从根儿上理解MySQL,首先需要了解其基本工作原理和核心概念。 1. **重新认识MySQL** MySQL采用...

Global site tag (gtag.js) - Google Analytics