SQL:计算每列中不同值的数量

Rya*_*yan 7 mysql sql count distinct

我需要一个返回表的查询,其中每列是另一个表的列中不同值的计数.

我知道如何计算一列中的不同值:

select count(distinct columnA) from table1;
Run Code Online (Sandbox Code Playgroud)

我想我可以把它作为一个非常长的选择条款:

select count(distinct columnA), count(distinct columnB), ... from table1;
Run Code Online (Sandbox Code Playgroud)

但这不是很优雅,而且是硬编码的.我更喜欢更灵活的东西.

Raj*_*ore 5

此代码应该为您提供“table1”中的所有列,以及每个列各自的不同值计数作为数据。

DECLARE @TableName VarChar (Max) = 'table1'
DECLARE @SqlString VarChar (Max)

set @SqlString = (
  SELECT DISTINCT
    'SELECT ' + 
        RIGHT (ColumnList, LEN (ColumnList)-1) + 
      ' FROM ' + Table_Name
    FROM INFORMATION_SCHEMA.COLUMNS COL1
      CROSS AppLy (
        SELECT ', COUNT (DISTINCT [' + COLUMN_NAME + ']) AS ' + '''' + COLUMN_NAME + ''''
          FROM INFORMATION_SCHEMA.COLUMNS COL2
          WHERE COL1.TABLE_NAME = COL2.TABLE_NAME
          FOR XML PATH ('')
      ) TableColumns (ColumnList)
    WHERE
      1=1 AND 
      COL1.TABLE_NAME = @TableName
)

EXECUTE (@SqlString)
Run Code Online (Sandbox Code Playgroud)


Rya*_*yan 0

我感谢所有的回应。我认为在这种情况下最适合我的解决方案(从外部程序计算表的每列中不同值的数量,该外部程序除了其名称之外不知道该表)如下:

运行“describe table1”并从结果中提取列名。

循环遍历列名并创建查询来计算每列中的不同值。该查询看起来类似于“select count(distinct columnA), count(distinct columnB), ... from table1”。