当前位置: 首页 > 面试题库 >

将空值计为唯一值

尤研
2023-03-14
问题内容

我需要在列上计算不同的值,例如:

Hours
1
1
2
null
null
null

结果必须是: 3 。我的查询是:

select count(distinct hour) from hours;

但它返回:2.我还测试了:

select count(*) from hours group by hour

但它返回三行:

(1) 3
(2) 2
(3) 1

我怎样才能将空值算作1值,并使用distinct来避免对重复值进行计数?

我正在学习高级SQL,他们希望我对所有解决方案有以下要求:

尝试最小化解决查询所需的子查询数。此外,不允许使用以下构造:

  • 在FROM或SELECT中选择。允许您有子查询(在WHERE或HAVING中进行SELECT)
  • 聚合函数的组合,例如COUNT(COUNT …)),SUM(COUNT …))等。
  • 如果可以避免,请使用UNION。
  • 非标准功能(例如NVL)
  • 案子


问题答案:
select  count(distinct col1) + count(distinct case when col1 is null then 1 end)
from    YourTable


 类似资料:
  • 问题内容: 如果我有三列: 我想计算一下表格中有多少唯一的电子邮件,我该怎么做? 如下语句: 给我总数。 我试过了 但这似乎并没有给我期望的数字。 问题答案: 采用 提供唯一的电子邮件ID,然后简单地对其进行计数。

  • 问题内容: 我有以下json 我想计算重复的名字 重复计数3 不可重复的名字计数 非重复计数2 我试图计算存储桶的数量,但似乎计算所有存储桶是重复的还是非重复的 问题答案: 好吧,我在这里利用了几种聚合。以下是我使用过的列表。列表的顺序是聚合的执行顺序。 对于重复 术语汇总 统计数据桶汇总 对于非重复 术语汇总 桶选择器 (作为子集合) 总和桶选择器 汇总查询: 响应 注意,在上面的响应中,我们有

  • 问题内容: 我需要在每笔 数据中都计算唯一值 我尝试 但是我想得到 问题答案: 您需要: 如果需要字符: 或正如乔恩所说: 您可以像这样保留列名: 区别在于返回一个Series并返回一个DataFrame。

  • 问题内容: 我有以下形式的数据: 组内的非空值始终相同。我想对每个组(如果存在)的非空值进行一次计数,然后找到每个值的总数。 我目前正在以以下方式(笨拙和低效)进行此操作: 我敢肯定,有一种方法可以更干净地执行此操作,而无需使用循环,但是我似乎无法解决问题。任何帮助将非常感激。 问题答案: 我认为您可以使用: 的另一种解决方案,然后创建new by ,将其重塑为by和last :

  • 我想在按“prop”分组后,根据“井”的值生成列well_rep。 类似于cur_group_id,但是数字在不同的组中从1开始?

  • 我有一个包含以下列的表:id、col1、col2、col3、col4、col5、col6。 约束表示至少有3列被填充(所以最多3个NULs)。(列不按顺序填充,所以可以有col1、col2、col5被填充,col3、col4、col6是NULs) 如何确保当该列不为NULL时,它在此行的其他列中是唯一的?如何确保非空值的组合在所有行中都是唯一的? 我目前添加了以下约束(以确保至少3个非空):