mysql - 计算一行中重复的列值

标签 mysql sql infinidb

我有一个非规范化表,我必须在其中计算其他列中相同值的数量。 我正在使用 InfiniDB Mysql 存储引擎。

这是我的 table :

col1 | col2 | col3
------------------
A    | B    | B
A    | B    | C
A    | A    | A

这就是我所期望的:

col1Values | col2Values | col3Values
------------------------------------
    1      |     2      |      2     -- Because B is in Col2 and Col3
    1      |     1      |      1     
    3      |     3      |      3

有没有类似的东西

-- function count_values(needle, haystack1, ...haystackN)
select count_values(col1, col1, col2, col3) as col1values -- col1 is needle
    , count_values(col2, col1, col2, col3) as col2values -- col2 is needle
    , count_values(col3, col1, col2, col3) as col3values -- col3 is needle
from table

还是我错过了一些可以解决问题的简单方法? :-)

提前致谢

罗马

最佳答案

     select 
        CASE WHEN col1 = col2 and col1=col3 THEN '3' 
             WHEN col1 = col2 or col1=col3 THEN '2' 
             WHEN col1 != col2 and col1!=col3 THEN '1' 
        ELSE '0' END AS col1_values, 

        CASE WHEN col2 = col1 and col2=col3 THEN '3' 
             WHEN col2 = col1 or col2=col3 THEN '2' 
             WHEN col2 != col1 and col2!=col3 THEN '1' 
        ELSE '0' END AS col2_values,

       CASE WHEN col3 = col1 and col3=col2 THEN '3' 
            WHEN col3 = col1 or col3=col2 THEN '2' 
            WHEN col3 != col1 and col3!=col2 THEN '1' 
       ELSE '0' END AS col3_values

FROM table_name

fiddle demo

关于mysql - 计算一行中重复的列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12912183/

相关文章:

mysql - 使用经典 ASP 导致 MySQL 崩溃的表情符号字符

c# - MySQL 访问拒绝 C# 应用程序但不访问工作台

php - Wordpress MySQL 不会在查询字符串中执行变量

代码中类似 Mysql 枢轴的功能

mysql - 为每个不同的名称显示表中最近添加的行

c# - 如何为每个用户打开单独的窗口

sql - 删除SQL表中的分层数据

mysql - 如何在 infinidb 中取消/中止回滚?

mysql - 仅使用等连接在滑动窗口上聚合