Sql ent,我建议删除distinct关键字。+一个是因为你详细解释你的解决方案的方式。是的,你很接近,我也可以在这里找到答案。不过,我想从这里得到的只是查询返回的列表中所有不同组的总数。例如,在上一个返回6行的示例中,有两个不同的组名的userid
Sql ent,我建议删除distinct关键字。+一个是因为你详细解释你的解决方案的方式。是的,你很接近,我也可以在这里找到答案。不过,我想从这里得到的只是查询返回的列表中所有不同组的总数。例如,在上一个返回6行的示例中,有两个不同的组名的userid,sql,oracle,Sql,Oracle,ent,我建议删除distinct关键字。+一个是因为你详细解释你的解决方案的方式。是的,你很接近,我也可以在这里找到答案。不过,我想从这里得到的只是查询返回的列表中所有不同组的总数。例如,在上一个返回6行的示例中,有两个不同的组名的userid
ent,我建议删除
distinct
关键字。+一个是因为你详细解释你的解决方案的方式。是的,你很接近,我也可以在这里找到答案。不过,我想从这里得到的只是查询返回的列表中所有不同组的总数。例如,在上一个返回6行的示例中,有两个不同的组名的userid<4,因此我预期的查询返回将是计数2。@Kawili wili,好的,在这种情况下,您只需要进行计数。请在答案中查看我的更新。@Polppan谢谢你,伙计+一个是关于你详细解释你的解决方案的方式。是的,你很接近,这也是我可以达到的。不过,我想从这里得到的只是查询返回的列表中所有不同组的总数。例如,在上一个返回6行的示例中,有两个不同的组名的userid<4,因此我预期的查询返回将是计数2。@Kawili wili,好的,在这种情况下,您只需要进行计数。请在答案中查看我的更新。@Polppan谢谢你,伙计!
Table A
| GROUP_NAME | USERID |
| group_A | user1 |
| group_A | user2 |
| group_B | user3 |
| group_A | user4 |
| group_B | user5 |
| group_C | user6 |
| group_B | user7 |
| group_C | user8 |
| group_C | user9 |
| group_A | user10 |
select count(distinct group_name)
from Table_A
group by userid having count(*) < 5;
select count(distinct group_name) from Table_A having count(*) < 5;
SQL> CREATE TABLE t
2 (GROUP_NAME varchar2(7), USERID varchar2(6))
3 ;
Table created.
SQL>
SQL> INSERT ALL
2 INTO t (GROUP_NAME, USERID)
3 VALUES ('group_A', 'user1')
4 INTO t (GROUP_NAME, USERID)
5 VALUES ('group_A', 'user2')
6 INTO t (GROUP_NAME, USERID)
7 VALUES ('group_B', 'user3')
8 INTO t (GROUP_NAME, USERID)
9 VALUES ('group_A', 'user4')
10 INTO t (GROUP_NAME, USERID)
11 VALUES ('group_B', 'user5')
12 INTO t (GROUP_NAME, USERID)
13 VALUES ('group_C', 'user6')
14 INTO t (GROUP_NAME, USERID)
15 VALUES ('group_B', 'user7')
16 INTO t (GROUP_NAME, USERID)
17 VALUES ('group_C', 'user8')
18 INTO t (GROUP_NAME, USERID)
19 VALUES ('group_C', 'user9')
20 INTO t (GROUP_NAME, USERID)
21 VALUES ('group_A', 'user10')
22 SELECT * FROM dual
23 ;
10 rows created.
SQL>
SQL> COMMIT;
Commit complete.
SQL>
SQL> SELECT t.*,
2 COUNT(GROUP_NAME) OVER(PARTITION BY GROUP_NAME ORDER BY GROUP_NAME) cnt
3 FROM t;
GROUP_N USERID CNT
------- ------ ----------
group_A user10 4
group_A user2 4
group_A user1 4
group_A user4 4
group_B user3 3
group_B user5 3
group_B user7 3
group_C user8 3
group_C user9 3
group_C user6 3
10 rows selected.
SQL>
SQL> WITH DATA AS
2 (SELECT t.*,
3 COUNT(GROUP_NAME) OVER(PARTITION BY GROUP_NAME ORDER BY GROUP_NAME) cnt
4 FROM t
5 )
6 SELECT GROUP_NAME, USERID FROM DATA WHERE cnt < 4;
GROUP_N USERID
------- ------
group_B user3
group_B user5
group_B user7
group_C user8
group_C user9
group_C user6
6 rows selected.
SQL>
SQL> WITH DATA AS
2 (SELECT t.*,
3 COUNT(GROUP_NAME) OVER(PARTITION BY GROUP_NAME ORDER BY GROUP_NAME) cnt
4 FROM t
5 )
6 SELECT count(DISTINCT group_name) cnt FROM DATA WHERE cnt < 4;
CNT
----------
2
SQL>
select count(1) as nr_of_users, group_name
from table_a
group by group_name
having count(1) < 4
select count(1) from (
select count(1) as nr_of_users, group_name
from table_a
group by group_name
having count(1) < 4
) as a
SELECT group_name,
COUNT(userid)
FROM table_a
GROUP BY group_name
HAVING COUNT(userid) < 5;
SELECT group_name,
COUNT(DISTINCT userid)
FROM table_a
GROUP BY group_name
HAVING COUNT(DISTINCT userid) < 5;
SELECT COUNT(1)
FROM (SELECT group_name,
COUNT(DISTINCT userid)
FROM table_a
GROUP BY group_name
HAVING COUNT(DISTINCT userid) < 5);