SQL分组问题

SQL分组问题,sql,oracle,group-by,Sql,Oracle,Group By,Neea提供了有关sql中分组的帮助 我喜欢桌子 id1 id2 type 1 1 300 1 3 300 1 2 300 1 5 300 2 2 100 2 5 200 2 7 300 4 3 100 4 9 300 4 2 300 我需要只映射到一种类型的id1, 例如,id1“1”仅映射到类型300,因此只有当有多个类型映射到id1时才应检索该类型,而不应检索该类型。请帮忙。 以下是我的尝试。但是它只处理类型

Neea提供了有关sql中分组的帮助

我喜欢桌子

id1 id2 type
1   1   300
1   3   300
1   2   300
1   5   300
2   2   100
2   5   200
2   7   300
4   3   100
4   9   300
4   2   300
我需要只映射到一种类型的id1,
例如,id1“1”仅映射到类型300,因此只有当有多个类型映射到id1时才应检索该类型
,而不应检索该类型。请帮忙。
以下是我的尝试。但是它只处理类型300。
我需要检索所有单独映射到一个特定类型的id1。因此,如果id1“2”仅映射为类型“100”,则还应检索它

SELECT distinct id1 from ID_TABLE where type = 300 and id1 not in 
 (SELECT id1 from type_table where type in (100, 200, 250)) 
 and id1 in ( SELECT id1 FROM ID_TABLE type=300) 
 order by id1

在下面的
分组依据
之后,您可能仍然有多个
id1
,因此
拥有
将仅限于类型只有一个id1的情况。此处使用
MIN
作为任意聚合器,因为无论如何只有一个值:

SELECT MIN(id1), type
FROM type_table
  GROUP BY type
HAVING COUNT(id1)=1;

Oracle 11g R2架构设置

CREATE TABLE tbl ( id1, id2, type ) AS
          SELECT 1,   1,   300 FROM DUAL
UNION ALL SELECT 1,   3,   300 FROM DUAL
UNION ALL SELECT 1,   2,   300 FROM DUAL
UNION ALL SELECT 1,   5,   300 FROM DUAL
UNION ALL SELECT 2,   2,   100 FROM DUAL
UNION ALL SELECT 2,   5,   200 FROM DUAL
UNION ALL SELECT 2,   7,   300 FROM DUAL
UNION ALL SELECT 4,   3,   100 FROM DUAL
UNION ALL SELECT 4,   9,   300 FROM DUAL
UNION ALL SELECT 4,   2,   300 FROM DUAL
UNION ALL SELECT 4,   4,   200 FROM DUAL
UNION ALL SELECT 5,   2,   200 FROM DUAL
UNION ALL SELECT 5,   4,   200 FROM DUAL;
SELECT   id1,
         MIN( type )
FROM     tbl
GROUP BY id1
HAVING COUNT( DISTINCT type ) = 1
| ID1 | MIN(TYPE) |
|-----|-----------|
|   1 |       300 |
|   5 |       200 |
查询1

CREATE TABLE tbl ( id1, id2, type ) AS
          SELECT 1,   1,   300 FROM DUAL
UNION ALL SELECT 1,   3,   300 FROM DUAL
UNION ALL SELECT 1,   2,   300 FROM DUAL
UNION ALL SELECT 1,   5,   300 FROM DUAL
UNION ALL SELECT 2,   2,   100 FROM DUAL
UNION ALL SELECT 2,   5,   200 FROM DUAL
UNION ALL SELECT 2,   7,   300 FROM DUAL
UNION ALL SELECT 4,   3,   100 FROM DUAL
UNION ALL SELECT 4,   9,   300 FROM DUAL
UNION ALL SELECT 4,   2,   300 FROM DUAL
UNION ALL SELECT 4,   4,   200 FROM DUAL
UNION ALL SELECT 5,   2,   200 FROM DUAL
UNION ALL SELECT 5,   4,   200 FROM DUAL;
SELECT   id1,
         MIN( type )
FROM     tbl
GROUP BY id1
HAVING COUNT( DISTINCT type ) = 1
| ID1 | MIN(TYPE) |
|-----|-----------|
|   1 |       300 |
|   5 |       200 |

CREATE TABLE tbl ( id1, id2, type ) AS
          SELECT 1,   1,   300 FROM DUAL
UNION ALL SELECT 1,   3,   300 FROM DUAL
UNION ALL SELECT 1,   2,   300 FROM DUAL
UNION ALL SELECT 1,   5,   300 FROM DUAL
UNION ALL SELECT 2,   2,   100 FROM DUAL
UNION ALL SELECT 2,   5,   200 FROM DUAL
UNION ALL SELECT 2,   7,   300 FROM DUAL
UNION ALL SELECT 4,   3,   100 FROM DUAL
UNION ALL SELECT 4,   9,   300 FROM DUAL
UNION ALL SELECT 4,   2,   300 FROM DUAL
UNION ALL SELECT 4,   4,   200 FROM DUAL
UNION ALL SELECT 5,   2,   200 FROM DUAL
UNION ALL SELECT 5,   4,   200 FROM DUAL;
SELECT   id1,
         MIN( type )
FROM     tbl
GROUP BY id1
HAVING COUNT( DISTINCT type ) = 1
| ID1 | MIN(TYPE) |
|-----|-----------|
|   1 |       300 |
|   5 |       200 |

询问代码的问题必须证明对正在解决的问题的最低理解。包括尝试的解决方案,以及它们不起作用的原因。能否更新您的问题并添加预期结果?另外,正如已经指出的,请展示您迄今为止所做的尝试。