首页 > 试题广场 >

出现三次以上相同积分的情况

[编程题]出现三次以上相同积分的情况
  • 热度指数:87048 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解


在牛客刷题的小伙伴们都有着牛客积分,积分(grade)表简化可以如下:

id number
1
2
3
4
5
111
333
111
111
333

id为用户主键id,number代表积分情况,让你写一个sql查询,积分表里面出现三次以及三次以上的积分,查询结果如下:

111
注意:若有多个符合条件的number,则按number升序排序输出。
示例1

输入

drop table if exists grade;
CREATE TABLE `grade` (
`id` int(4) NOT NULL,
`number` int(4) NOT NULL,
PRIMARY KEY (`id`));

INSERT INTO grade VALUES
(1,111),
(2,333),
(3,111),
(4,111),
(5,333);

输出

111
select number from grade 
group by number 
having count(number) >= 3

要筛选某一字段出现的次数,先分组,再设置筛选条件,涉及到聚合函数,用having
发表于 2021-12-23 10:10:59 回复(0)
select number
from grade
group by number
having count(number)>=3;

发表于 2020-08-27 17:31:30 回复(3)
本题表述有误,“3次以上” 应改为 “3次及以上”
SELECT number FROM grade
GROUP BY number
HAVING COUNT(number) >= 3


发表于 2020-09-03 21:28:28 回复(10)
SELECT number
FROM grade
GROUP BY number
HAVING COUNT(number)>=3
题目为积分表里面出现三次以及三次以上的积分
获取目标:积分
筛选条件:出现三次或三次以上
思路:筛选条件为某一字段出现次数,则要对该字段进行统计,故要先对字段进行分组GROUP BY,第二要设置筛选条件COUNT(number)>=3, 因条件包含聚集函数,所以只能使用HAVING,而不能使用WHERE。
发表于 2021-03-26 10:52:32 回复(0)
大家的答案都写得太好了。我自己第一反应是用子查询,看了大家的答案之后,反倒觉得自己多此一举,把简单问题复杂化了。
select number
from (
      select number,count(number) a
      from grade
      group by number
    ) c
where c.a>=3

发表于 2022-08-01 20:23:37 回复(0)
select number
from grade
group by number
having count(*)>=3;

发表于 2021-04-11 09:58:34 回复(0)
考点:聚合函数的使用
select number
from grade
group by number
having count(*) >2


发表于 2021-03-28 10:13:11 回复(0)
select distinct g1.number 
from grade g1
where (select count(*) from grade g2 
     where g1.number=g2.number)>=3
发表于 2020-09-27 15:11:15 回复(1)
按照number分组,然后二次统计每组的id个数,选出满足条件(大于等于3)的
select number from grade group by number having count(id)>2


发表于 2020-08-20 11:26:32 回复(1)
select number
from grade
group by number
having count(number) >= 3;
group by分组统计,having筛选。

发表于 2021-10-09 17:40:49 回复(0)
select number 
from grade
group by number
having count(number)>=3

发表于 2024-10-30 16:06:49 回复(0)
SELECT g.number
FROM (
    SELECT
        number,
        COUNT(*) AS c
    FROM grade
    GROUP BY number
    HAVING c >= 3
) g
发表于 2024-10-25 22:15:12 回复(0)
select number
from grade
group by number
having count(1) >= 3
order by number asc;
对积分number进行分组,组内统计次数having count(1)
发表于 2024-10-06 22:14:13 回复(0)
#大佬帮忙看下这样为啥不行
select distinct g.number
from grade g
where g.id in (
select id
from grade
where count(number) >= 3
)
order by number ASC
发表于 2024-09-22 17:33:20 回复(0)
select number
from grade
group by number
having count(*) >= 3

发表于 2024-09-20 14:40:43 回复(0)
with t1 as (
    select number,count(number) as co
    from grade
    group by number
)#首先需要建立一个对number计数的表,number的数量进行筛选
select number
from t1
where co >= 3
发表于 2024-08-29 15:07:26 回复(0)
#按积分数来分组,每组记录数大于或等于3的就是
select number
from grade
group by number
having count(*)>=3
order by number;


发表于 2024-08-04 16:06:56 回复(0)
为啥不能用select *呢,得用select number
发表于 2024-07-03 18:55:07 回复(1)

order by好像没必要使用了。

select
    number
from grade
group by number
having count(id) >= 3
order by number;
发表于 2024-06-04 19:20:56 回复(0)
select number from grade
group by number
having count(number) >= 3 
order by number asc;
编辑于 2024-04-12 10:58:53 回复(0)