oraclesql:如何在Oracle中编写以下SQL

oraclesql:如何在Oracle中编写以下SQL,sql,oracle,select,group-by,count,Sql,Oracle,Select,Group By,Count,有一个表t1: id type 1 a 1 b 2 c 2 a 3 a 3 a 4 a 现在我需要检查id是否只有typea,计数是否为1(单个),也就是说,在上面的数据中只有id 4满足这个条件 SELECT type, COUNT (1) FROM t1 where id = :id GROUP BY type HAVING COUNT (1) = 1; 我使用上面的SQL查询获取数据,然后在代码中使用它。这不是一个好的解决方案,有人能帮我用一

有一个表t1:

id type 
1    a
1    b
2    c
2    a
3    a
3    a
4    a
现在我需要检查id是否只有type
a
,计数是否为1(单个),也就是说,在上面的数据中只有id 4满足这个条件

SELECT type, COUNT (1)
FROM t1
where id = :id
GROUP BY type
HAVING COUNT (1) = 1;

我使用上面的SQL查询获取数据,然后在代码中使用它。这不是一个好的解决方案,有人能帮我用一个SQL查询得到正确的结果吗?

您想要一个简单的聚合查询,其中包含BY子句,确保只存在一行,并且其类型等于
'a'

SELECT id
FROM t1
GROUP BY id
HAVING COUNT(*) = 1 and SUM(DECODE(type, 'a', 0, 1)) = 0

您需要
id
groupby
子句中,只需过滤掉
类型
s和
具有
子句:

SELECT id
FROM t1
GROUP BY id
HAVING MIN(type) = MAX(type) AND MIN(type) = 'a';

我会根据ID进行分组,并根据两个方面进行筛选:

  • 总数是1
  • 非类型a(使用case语句)的行数为0

  • 选择id
    从t1开始
    按id分组
    计数(*)为1,计数(类型为“a”时为1结尾)=0
    
    我只想做:

    SELECT id
    FROM t1
    GROUP BY id
    HAVING COUNT(*) = 1 AND MIN(type) = 'a';
    

    谢谢,我认为这是更好的解决方案
    SELECT id
    FROM t1
    GROUP BY id
    HAVING COUNT(*) = 1 AND MIN(type) = 'a';