从 table 的多列中选择不同的值及其计数

Selecting distinct values from multiple column of a table with their count

我想 select 来自多个相同 table 列的不同值及其计数 例子

输出应该是这样的

将所有列值归为一行并求出计数

SQL 服务器

;WITH CTE AS
(
   SELECT COL1 Name
   FROM YOURTABLE
   UNION ALL
   SELECT COL2
   FROM YOURTABLE
   UNION ALL
   SELECT COL3
   FROM YOURTABLE
   UNION ALL
   SELECT COL4
   FROM YOURTABLE
   UNION ALL
   SELECT COL6
   FROM YOURTABLE
   UNION ALL
   SELECT COL7
   FROM YOURTABLE
)
SELECT DISTINCT Name,COUNT(Name) OVER(PARTITION BY Name) [COUNT]
FROM CTE 

MYSQL

SELECT Name,COUNT(*) [COUNT]
(
   SELECT COL1 Name
   FROM #TEMP
   UNION ALL
   SELECT COL2
   FROM #TEMP  
   UNION ALL
   SELECT COL3
   FROM #TEMP  
   UNION ALL
   SELECT COL4
   FROM #TEMP  
   UNION ALL
   SELECT COL6
   FROM #TEMP  
   UNION ALL
   SELECT COL7
   FROM #TEMP      
)TAB   
GROUP BY Name

由于 OP 在他的评论中说他使用 MYSQL 这应该有效

SELECT data,COUNT(data)
FROM  
(
   SELECT COL1 data
   FROM tableso
   UNION ALL
   SELECT COL2
   FROM tableso
   UNION ALL
   SELECT COL3
   FROM tableso
   UNION ALL
   SELECT COL4
   FROM tableso
   UNION ALL
   SELECT COL6
   FROM tableso
   UNION ALL
   SELECT COL7
   FROM tableso
) finaltable group by data;

SQL FIDDLE: http://sqlfiddle.com/#!2/1f8cf/10

我认为已接受的答案不适用于 MYSQL

更新:

操作员改变了他对数据库的看法(对 MSSQL)并且接受的答案有两个数据库版本

既然你也在用Sql Server,会这样推荐你

使用 Table valued constructor 将列转换为行,然后 count name

这将避免多次 table 扫描。

SELECT name,
       [count]=Count(1)
FROM   yourtable
       CROSS apply (VALUES (col1),(COL2),(col3),(col4),(COL6),(col7)) cs (name)
GROUP  BY name

注意: 这在 Mysql

中不起作用

SQLFIDDLE DEMO