在mysql中过滤一个组

Posted

技术标签:

【中文标题】在mysql中过滤一个组【英文标题】:Filter a group in mysql 【发布时间】:2015-07-06 06:14:46 【问题描述】:

我有以下表格中的示例数据

Id      Dsc
500001  INSURED
500001  THIRD PARTY
500001  THIRD PARTY
500001  THIRD PARTY
500002  INSURED
500002  THIRD PARTY
500003  INSURED
500004  BROKER
500005  CLAIMANT

我希望提取那些 Dsc 既不是“被保险人”也不是“经纪人”的 ID。由于两列都有重复数据,因此我为此设计了以下查询..

Select Id from table1 where Dsc not in ('Insured', 'Broker')
Except
Select Id from table1 where Dsc in ('Insured', 'Broker')

有没有其他方法可以做到这一点?

【问题讨论】:

你的数据库是什么? 这是一个 MSSQL 数据库。 【参考方案1】:
SELECT id FROM table1 GROUP BY id 
HAVING SUM(CASE WHEN Dsc='Insured' THEN 1 ELSE 0 END)=0
AND SUM(CASE WHEN Dsc='Broker' THEN 1 ELSE 0 END)=0

【讨论】:

【参考方案2】:

您可以将查询编写为:

SELECT Id FROM (
SELECT Id , SUM(CASE WHEN Dsc IN ('INSURED','BROKER') THEN 1 ELSE 0 END ) AS Condition
FROM @Test
GROUP BY Id
) T 
WHERE Condition = 0

DEMO

【讨论】:

【参考方案3】:

使用相同的子查询:

Select id,dsc from (select id,dsc from table1 group by id, dsc) 
where dsc not in('Insured', 'Broker')

【讨论】:

【参考方案4】:

使用此代码停止重复列

Select distinct *from table1 

【讨论】:

以上是关于在mysql中过滤一个组的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 工作台,如何为日期创建过滤器以安排组

Mysql查询检索帖子并根据特定日期间隔进行过滤

如何在每个组 ExtJS 4 中过滤分组网格

Spark:在每个组中过滤

过滤一组包含在其他短语中的所有短语的算法

MySQL基础之MySQL必知必会用通配符进行过滤