mysql,查找表中的频率

标签 mysql sql

我在 PHPMyAdmin 中有一个包含六列的表。 每个单元格都有一个名字。

现在我想知道每列中每个名字出现的频率。

例如:

column1  column2  column3
name1    name3    name2
name1    name2    name2
name2    name3    name1

然后我需要一个列表:

column1           column2   column3
name1 - 2         0         1
name2 - 1         1         2
name3 - 0         2         0

我尝试玩:

SELECT Count(*) FROM aanmeldingen2013 WHERE column1 LIKE name1.

有人可以帮助我使用 SQL 代码来生成此输出吗?

最佳答案

我认为这是最有效的方法:

select name,
       sum(n = 1) as Column1Cnt,
       sum(n = 2) as Column1Cnt,
       sum(n = 3) as Column1Cnt
from (select (case when n.n = 1 then column1
                   when n.n = 2 then column2
                   when n.n = 3 then column3
              end) as name,
             n.n
      from t cross join
           (select 1 as n union all select 2 union all select 3) n
     ) t

这应该比union all查询更有效,因为它只扫描原始表一次。我在此处展示了三列的示例(如示例数据中所示)。应该清楚如何将其概括为六列。

关于mysql,查找表中的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18081557/

相关文章:

mysql - 在 Mysql 中从一个表复制到另一个表时表情符号不可见

mysql - mysql 的多个大小写值

mysql - 将多行数据组合成同行不同列 : mysql

MySQL从600K行中快速选择10个随机行

sql - 在列中查找所有但允许的字符

php - 识别用户、MySQL 和 PHP 的重复条目

sql连接问题

php - 如果使用 php/mysqli 值为空,如何将列值设置为零?

sql - SQL 中的 NOT EXISTS 子句

php - 我想对members表中的每个成员进行SQL查询