group by 获取最大的一组 count(1) 值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了group by 获取最大的一组 count(1) 值相关的知识,希望对你有一定的参考价值。

create table tmp3(
rootcol varchar2(10),
nodecol varchar2(10)
);
insert into tmp3 values ('51','a');
insert into tmp3 values ('52','a');
insert into tmp3 values ('53','a');
insert into tmp3 values ('54','b');
insert into tmp3 values ('55','b');
insert into tmp3 values ('56','b');
insert into tmp3 values ('57','c');
insert into tmp3 values ('58','c');
insert into tmp3 values ('59','d');
insert into tmp3 values ('50','e');
commit;
这是我想要的结果如图1-1:
1-1
1.我想问的是怎么获得 最大的一组count(1) 如图1-2:
1-2
我不想要类似的SQL:
select t.nodecol,count(1) from tmp3 t
group by t.nodecol having count(1)=(
select max(count) from
(
select t.nodecol,count(1) count from tmp3 t
group by t.nodecol)
)
2.怎么能查询到我想要的结果 如图1-1

参考技术A 为啥不想要你写的sql?
要找出分组计数最多的哪些组,必然要先算出最大的分组计数,只不过写法可以变通一下,但思路不变
with t as (select nodecol, count(1) cnt from tmp3 group by nodecol)
select * from t where cnt=(select max(cnt) from t)追问

因为里边还涉及到其它 条件 代码太臃肿,把代码写全吧 谢谢!

追答

with t as (select nodecol, count(1) cnt from tmp3 group by nodecol)
select rootcol,nodecol
from tmp3 join t on tmp3.nodecol=t. nodecol
where cnt=(select max(cnt) from t)

参考技术B

1

select * from 
(select nodecol,count(*) counts from tmp3 group by nodecol) t
where counts=(select max(count(*)) from tmp3 group by nodecol)

 

2

select * from tmp3 where nodecol in(
select  t.nodecol from 
(select nodecol,count(*) counts from tmp3 group by nodecol) t
where counts=(select max(count(*)) from tmp3 group by nodecol))

追问

和我写的代码 一样的臃肿 我不想重复查询

是否可以使用 count 和 group by 获取查询的百分比值?

【中文标题】是否可以使用 count 和 group by 获取查询的百分比值?【英文标题】:Is possible to get the percentage value on query using count and group by? 【发布时间】:2021-07-08 16:33:42 【问题描述】:

我有一个问题:

select no_tipo_origem, 
       count(*) total 
from table 
group by no_tipo_origem

结果是:

tipo 1 |  25
tipo 2 | 133
tipo 3 |  48

我需要这样计算百分比:

tipo 1 |  25 | 12.1
tipo 2 | 133 | 64.5
tipo 3 |  48 | 23.3

【问题讨论】:

【参考方案1】:

将每个总数除以您可以使用SUM() 窗口函数获得的所有总数的总和:

select no_tipo_origem, 
       count(*) total,
       round(100.0 * count(*) / sum(count(*)) over (), 1) percentage 
from tablename 
group by no_tipo_origem
order by no_tipo_origem

查看简化的demo。

【讨论】:

以上是关于group by 获取最大的一组 count(1) 值的主要内容,如果未能解决你的问题,请参考以下文章

mysql在group by之后如何获取每一组中id最大的那一行

group by后接的having语句怎样使用才是有效的,我为啥不行的

MySQL查询:Group By 后取出每一组中最大的数据

获取“COUNT”/“GROUP BY”MySQL查询的空结果

13group by分组

group by cno having count(*) between 100 and 150); 是啥意思?