不确定这里的标题是否正确...
但无论如何,为了简单起见,我有一个包含三个字段的表格,如下所示:
USER_ID Number_Of_Apples Number_Of_Pears
ABC1 1 NULL
ABC2 1 NULL
ABC3 NULL 5
ABC4 1 12
我想知道是否有办法对各种类型的“不同”查询进行分析,这将为每个字段提供不同级别的数据。所以在上面的例子中,我希望看到类似的东西:
USER_ID Number_OF_Apples Number_OF_Pears
4 2 3
Number_Of_Apples b / c返回2我们只在数据集中看到2个可能的值。
我想知道如果你有100个或更多的领域,是否有一种优雅的方式呢?
答案 0 :(得分:0)
试试这个:
SELECT (SELECT COUNT(DISTINCT USER_ID)
FROM mytable) AS USER_ID,
(SELECT COUNT(DISTINCT CASE
WHEN Number_Of_Apples IS NULL THEN -1
ELSE Number_Of_Apples
END)
FROM mytable) AS Number_Of_Apples ,
(SELECT COUNT(DISTINCT CASE
WHEN Number_Of_Pears IS NULL THEN -1
ELSE Number_Of_Pears
END) AS Number_Of_Pears
FROM mytable) AS Number_Of_Pears
上述查询使用CASE
表达式来处理NULL
和Number_Of_Apples
列的Number_Of_Pears
值。我已经假设-1
不是这两列的可能值。
答案 1 :(得分:0)
与您的other question类似,您可以使用合并计算不同,以确保计算空值:
SELECT COUNT(DISTINCT(COALESCE([USER_ID], 'nullitem'))) [USER_ID],
COUNT(DISTINCT(COALESCE([Number_Of_Apples], 'nullitem'))) [Number_Of_Apples],
COUNT(DISTINCT(COALESCE([Number_Of_Pears], 'nullitem'))) [Number_Of_Pears]
FROM mytable
只需添加您需要的任何物品。