exTab
PK col1 col2 col3
---------------------------------
1 val1 val4 val7 **want to return this row only
2 val1 val4 val8
3 val1 val4 val8
4 val1 val5 val9
5 val2 val5 val9
6 val2 val5 val9
7 val2 val6 val0
8 val3 val6 val0
如何使用SQL(与mySQL一起)只返回col1中具有多个相同值、col2中具有多个相同值、但COL3中具有唯一值的行?
例如,在上面的表(exTab)中,val1在col1中出现了4次,对于这4次,val4在col2中出现了3次,但是对于这3次,val7在col3中只出现了一次,所以我想返回这一行(第1行)。考虑到这些条件,第1行将是我希望从此表返回的唯一一行。
我试过和group by的各种组合
你可以尝试以下几点:
SELECT
*
FROM table
WHERE col1 IN (SELECT col1 FROM table GROUP BY 1 HAVING count(*)>1)
AND col2 IN (SELECT col2 FROM table GROUP BY 1 HAVING count(*)>1)
AND col3 IN (SELECT col3 FROM table GROUP BY 1 HAVING count(*)=1)
尽管如果你的桌子很大,表现可能会很糟糕。
如果我很好地理解这个问题,SQL查询可能会帮助你:
SELECT
SubTab.PK
FROM
(SELECT
PK,
COUNT(col3) OVER (PARTITION BY col1) as col1_group,
COUNT(col3) OVER (PARTITION BY col2) as col2_group
FROM
exTab) SubTab
WHERE
SubTab.col1_group = 1 AND SubTab.col2_group = 1;
它将在原始选项卡上运行两个窗口聚合函数,然后返回临时选项卡,从该选项卡中,我们只选择col3在一个组和另一个组中唯一的行。
我将通过合并两个子查询的结果来做到这一点:
在子查询1中,我将得到不止一次出现的col1-col2组合。
在子查询2中,我会得到只出现一次的col1-col2-col3组合。
这两个子查询的交集(内部联接)将产生您正在寻找的记录。
select t1.*
from
exTab t1
inner join
(select col1, col2 from exTab
group by col1, col2
having count(*)>1) t2
inner join
(select col1, col2, col3 from exTab
group by col1, col2, col3
having count(*)=1) t3 on t2.col1=t3.col1
and t2.col2=t3.col2
and t1.col1=t3.col1
and t1.col2=t3.col2
and t1.col3=t3.col3
问题内容: 该主题的解决方案使我不知所措。 我有一个看起来像的表格(除与我的问题无关的其他字段之外): 名称,卡号,会员类型 现在,我想要一个显示卡号和成员类型相同的行的视图。这两个字段都是整数。名称为VARCHAR。名称不是唯一的,并且相同的名称也应显示重复的卡号,会员类型。 即,如果下表是表格: 我想要: 只需按卡号排序即可使其对人类有用。 最有效的方法是什么? 问题答案: 由于您提到的名称可
问题内容: 我的表是: 我想列出一组具有相同疾病的患者。pid和did分别是患者和疾病表中的主键,并且是has_disease表中的外键。 样本数据: 耐心 疾病 has_disease 以上数据的答案是因为它们具有完全相同的疾病1和3,即疟疾和病毒热。我想知道如何在mysql中实现这一点。 。 问题答案: 该查询返回给我们患者及其疾病。 通过完整的剂量列表比较2组患者,并将pid保留为相同的剂量
问题内容: 我有一张桌子,像这样: 我想选择具有相同基因座和染色体的所有行。例如,第3行和第4行。一次可能有2个以上,并且它们可能不是按顺序排列的。 我尝试了这个: 但是,即使重复,它总是返回第3行,从不返回第4行。我想我缺少明显而简单的东西,但我茫然。 有人可以帮忙吗? 问题答案: 您需要了解,当您在查询中包含内容时,您是在告诉SQL合并行。您将为每个唯一值获得一行。在随后过滤这些组。通常,您可
问题内容: 我确信必须有一个相对简单的方法来执行此操作,但是此刻正在使我逃脱。假设我有一个这样的SQL表: 现在,我想知道A和B列的每种值组合出现多少次,而与其他列无关。因此,在此示例中,我想要这样的输出: 用什么SQL来确定呢?我觉得这绝对不是一件很不常见的事情。 谢谢! 问题答案:
问题内容: 我正在尝试将具有相同ID但具有不同列值的不同行合并为一个。 例如 : 我希望将其结合起来,这样结果是: 或者 或上述内容的任何其他变体,以使行以某种方式连接在一起。 任何帮助,将不胜感激!提前致谢。 问题答案: 请先阅读我的评论-除非仅用于报告目的,否则您甚至都不要考虑这样做,并且您想了解如何在普通SQL中做到这一点(而不是使用报告的正确解决方案)工具)。 第二种格式最简单,特别是如果
问题内容: 如何从表中选择所有内容,并且如果列的值相同,则仅选择具有最大值的行,因此,如果有这样的表: 它只会选择ID最高的“ bob”,因此结果将返回: 谢谢你。 问题答案: 您可以使用子查询来计算每个名称的最大ID,然后返回与该子查询返回的ID匹配的所有行: 请看这里的小提琴。