获取相同两列之间的出现次数 table

get number of occurrences between two columns same table

我在如何获取 MySQL 中两列之间某个值的出现次数方面遇到问题。

id1 col1 col2
2    5      3
3    3      4
4    2      1
5    1      3
6    null   2

我怎样才能像下面这样得到两列之间出现的次数?

value     occurrence
3                3
1                2
2                2
4                1
5                1

您可以 union all 列,然后应用 count 聚合函数:

SELECT   val, COUNT(*) AS occurrence
FROM     (SELECT col1 AS val
          FROM   mytable
          UNION ALL
          SELECT col2 AS val
          FROM   mytable) x
GROUP BY val
ORDER BY occurrence DESC

根据实际数据(每个值的行数)预聚合可能更有效,只需尝试一下:

SELECT   val, SUM(occurrence) AS occurrence
FROM     (SELECT col1 AS val, COUNT(*) AS occurrence
          FROM   mytable
          UNION ALL
          SELECT col2 AS val, COUNT(*) AS occurrence
          FROM   mytable) x
GROUP BY val
ORDER BY occurrence DESC