【问题标题】:Removing results based on condition on SQL根据 SQL 上的条件删除结果
【发布时间】:2018-12-27 20:35:14
【问题描述】:

数据集上下文:表有一个列SEX_CODE,可以是M、F、B(已婚,所以名字是两个名字的组合)。所以household_ID 可以有三个重复项,都具有不同的SEX_CODE,并分为3 个单独的sub_id。 (还有 'U'-unknown,但那些从来没有重复的 household_ID 所以我们可以把它们排除在外)

目标:我需要处理以下条件:

  1. 如果 household_IDSEX_CODE='M' 和 'F' 重复,则返回这两行。

  2. 如果 household_IDSEX_CODE='B' 和 'F'/'M' 重复 然后只返回'F'/'M'(或删除'B')。

  3. 如果 household_ID 有重复的 SEX_CODE='B' 和 'F' 和 'M' 然后只返回“F”和“M”(或删除“B”)。

我遇到了几个问题

  1. 我的主要查询是按household_IDsub_ID 进行分组,所以如果这些行具有相同的household_IDsub_ID,我就无法吐出2 行。

  2. 我不知道如何分成 3 个案例。我可以使用CASECOUNT 分为两种情况。

SQL Fiddle

我觉得我需要以完全不同的方式来处理它,而不是按组,但我不知道如何按案例分组。

我可以在 Excel 中手动删除它们(突出显示重复项>按颜色过滤>过滤 sex_code 'B'>全部删除)但查询将像 60,000+ 行,所以我想知道是否可以这样做在SQL。但如果这不可能,请不要担心,我会在 Excel 中完成。

【问题讨论】:

  • 样本数据和期望的结果真的很有帮助。例如,您的数据库中没有任何内容被称为 person_id,这似乎是您描述问题的核心。
  • person_ID 实际上应该是 household_ID 还是反之亦然?
  • 是的 person_id 是 home_id。我的错。对帖子进行了更改

标签: sql multiple-conditions


【解决方案1】:

假设 - ID == person_ID == family_ID(假设 ID 存在于小提琴中,而 person_ID 和 home_ID 均不存在)。

SELECT id,id_sub,SEX
FROM household hh
WHERE SEX <> 'B'
    OR
      NOT EXISTS (SELECT 1 FROM household h where h.id=hh.id and ( h.SEX='F' or h.SEX='M') )
ORDER BY id

该查询只获取所有记录,对于那些具有 SEX 'B' 的记录,它会检查表中是否没有具有相同 ID 的 SEX 'F' 或 'M' 的记录。 需要注意的是,值为 'U' 的记录(在 OP 中未提及),直接复制即可。

如果您希望从存在另一个 SEX (F/M) 的 SEX 'B' 表中删除记录 - 这将非常相似:

DELETE FROM household hh
WHERE SEX = 'B'
 AND
  EXISTS (SELECT 1 FROM household h where h.id=hh.id and ( h.SEX='F' or h.SEX='M') )

随着条件的明显逆转。

【讨论】:

  • 谢谢科恩。我错过了“U”和混淆了 ID,这很糟糕。进行了一些更改以澄清问题,但忘记检查整个帖子。虽然很好地使用了带有 SELECT 逻辑的 WHERE 子句。我会测试一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-18
  • 2021-02-22
  • 2021-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多