【问题标题】:SQL: Select a partition group which dies not have a specified valueSQL:选择一个没有指定值的分区组
【发布时间】:2021-06-21 23:42:52
【问题描述】:

我有一个如下表

IDNumber Name
123 Apple
123 Mango
123 Banana
126 Apple
126 Mango
126 Orange
128 Apple
128 Mango
128 Banana
151 Apple
151 Mango
151 Banana

我已使用 partition by 子句根据 ID 号对组进行分区。

with part as (Select IDNumber,count(IDNumber) over(Partition by IDNumber) cnt  from myTable) 
Select IDNumber from myTable where do not exists ???"Orange in partitionGroup"????

问题:我不确定如何实现。对于给定的 ID,如果存在给定的值,我需要一个分区组来不选择。

这给了我一个分区,其中每个组都有三个名称,但如果 IDNumber 有橙色作为名称,我不希望它被选中。 如果需要任何其他详细信息,请告诉我。非常感谢任何帮助。

【问题讨论】:

  • 清楚解释你要实现的逻辑。编辑您的问题并同时显示结果。

标签: sql oracle


【解决方案1】:

你可以在这里使用聚合:

SELECT IDNumber
FROM yourTable
GROUP BY IDNumber
HAVING COUNT(CASE WHEN Name = 'Orange' THEN 1 END) = 0;

另一种方式:

SELECT IDNumber
FROM yourTable
WHERE IDNumber NOT IN (
    SELECT IDNumber FROM yourTable WHERE Name = 'Orange'
);

【讨论】:

  • 嘿蒂姆,这似乎是一个不错的方法。我想这应该有效地删除具有橙色的组。非常感谢。感谢你的帮助。 :) 我现在正在尝试。
  • 感谢在 sqlfiddle.com/#!4/1bc0c3/1 中测试,效果很好。
【解决方案2】:

但如果 IDNumber 的名称为橙色,我不希望选择它。

您可以为此使用not exists

select t.*
from myTable t
where not exists (select 1
                  from myTable t2
                  where t2.id = t.id and t2.name = 'Orange'
                 );

您也可以使用窗口函数来表达这一点,但这似乎没有必要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-21
    • 2021-12-09
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 1970-01-01
    相关资源
    最近更新 更多