sql - 列中的分组和空值
问题描述
需要一些帮助来解决问题。
以下是我的输入数据。在这里,我正在根据名称字段进行分组。下面给出了我目前用于分组的查询。
select name from Table
group by name having count(distinct DOB)='1'
但问题是,如果组内所有记录的 DOB 字段为空,则上述查询不会影响记录。如果我尝试为 DOB 字段提供一些虚拟值,则它不会首先获取结果两行,如果我没有给出虚拟值,它不会影响 3 和 4 中的记录
我尝试过这样的事情,但这是错误的
select name from Table
group by name having count(distinct case when DOB is null then '9999-01-01' else DOB END)='1'
有人可以在这里提供一些建议。我的预期结果如下。
解决方案
您可以将逻辑替换为:
having min(dob) = max(dob) or
min(dob) is null
根据您的数据,count(distinct)
可能会相对昂贵,因此这实际上可能比使用它便宜。
您可以使用count(distinct)
. 只需更改比较值:
having count(distinct dob) <= 1
推荐阅读
- python - 如何将用户输入的值附加到 df 的不同列中?
- kubernetes - 为什么我的节点的“内部 IP 地址”设置为它们的外部 IP?
- java - android设备的图像捕获中不显示确定按钮
- python - 有没有办法在像消息框这样的弹出窗口中要求多项选择
- sql - 排除某些单词的触发器
- javascript - Cypress.io:如何从 cy.then 或 cy.each 函数中发送触发器?
- algorithm - 在 O(n) 时间内制作具有排序的 y 坐标的优先搜索树
- google-cloud-platform - 具有日期时间函数的数据存储区 GQL
- r - 将 facet_wrap 和 geom_segment 与自由 x 轴相结合?
- svg - SVG - 填充路径的孔(透明部分)