首页 > 试题广场 >

若要“查询选修了3门以上课程的学生的学号”,则正确的SQL语

[单选题]
若要“查询选修了3门以上课程的学生的学号”,则正确的SQL语句是( )
  • SELECT Sno FROM SC GROUP BY Sno WHERE COUNT(*)> 3
  • SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*)> 3
  • SELECT Sno FROM SC ORDER BY Sno WHERE COUNT(*)> 3
  • SELECT Sno FROM SC ORDER BY Sno HAVING COUNT(*)> 3
count()属于聚合函数,where后面不能接聚合函数
发表于 2019-03-15 15:07:53 回复(3)
1.order by 从英文里理解就是行的排序方式,默认的为升序。 order by 后面必须列出排序的字段名,可以是多个字段名。
2.group by 从英文里理解就是分组。必须有“聚合函数”来配合才能使用,使用时至少需要一个分组标志字段。
注意:聚合函数是---sum()、count()、avg()等都是“聚合函数”

发表于 2019-12-05 20:14:09 回复(3)

在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。

HAVING 子句可以让我们筛选分组后的各组数据。
SQL HAVING语法如下:
SELECT column_name, aggregate_function(column_name) 
FROM table_name 
WHERE column_name operator 
value GROUP BY column_name 
HAVING aggregate_function(column_name) operator value;


发表于 2020-02-26 17:28:33 回复(0)
分组是在SELECT语句的GROUP BY子句中建立的
MySQL允许过滤分组,规定包括哪些分组,排除哪些分组。过滤分组采用HAVING子句完成。
发表于 2019-08-28 16:17:24 回复(0)
group by 分组
order by 排序
CREATE TABLE IF NOT EXISTS `sc`(
`id` INT UNSIGNED,
`scid` INT UNSIGNED
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into `sc`(id, scid) values
(1,1),(2,1),(3,1),(2,2),(3,3);

select * from sc;

SELECT id FROM SC GROUP BY id;

SELECT id FROM SC order BY id;


having子句只能筛选查询过的数据
SELECT id FROM SC group BY id HAVING COUNT(*)> 1;
    id已经被查询过了
where子句只能筛选当前的数据
SELECT id FROM SC group BY id where COUNT(*)> 1; 

发表于 2021-03-28 17:33:43 回复(1)
&

count(*)计算了有多少行,由于groupby学号,则count(*)计算了每个学号有多少行

发表于 2020-04-07 10:17:05 回复(0)
group by  having 的搭配
where一般在分组之前
order一般在分组之后

发表于 2021-02-04 13:36:17 回复(0)
where、聚合函数、having 在from后面的执行顺序:
where>聚合函数(sum,min,max,avg,count)>having
若须引入聚合函数来对group by 结果进行过滤 则只能用having。
HAVING语句通常与GROUP BY语句联合使用,用来过滤由GROUP BY语句返回的记录集。
HAVING语句的存在弥补了WHERE关键字不能与聚合函数联合使用的不足。
1、where 后不能跟聚合函数,因为where执行顺序大于聚合函数。
2、where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
3、having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。


发表于 2020-09-09 22:08:58 回复(0)
执行顺序 where->groupby->聚合->having,where无论如何不能拿到聚合
发表于 2020-04-23 13:10:37 回复(0)
where不能和聚合函数一块使用 group by 需要和聚合函数搭配使用
发表于 2021-04-08 23:20:20 回复(0)
语法顺序:where -- group by -- having --order by
过滤行、分组、过滤分组、排序。
发表于 2022-02-10 13:22:34 回复(0)
SQL语句当中有一个语法规则,分组函数不可直接使用在where子句当中。(
因为group by是在where执行之后才会执行的。
),故排除A、C
group by : 按照某个字段或者某些字段进行分组。having : having是对分组之后的数据进行再次过滤。故排除D

发表于 2021-09-07 09:38:54 回复(0)

;group by的过滤使用having,所以排除a选项,然后每一个学号对应的课程数不唯一,所以分组学号后,得到每个学号对应的课程数,在进行过滤即可。

发表于 2021-06-03 22:08:35 回复(0)
B 直接根据选项排除 得到正确答案 where后面不能跟聚合函数 
编辑于 2021-03-07 16:08:18 回复(0)

在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。 HAVING 子句可以让我们筛选分组后的各组数据。 SQL HAVING语法如下: SELECT column_name, aggregate_function(column_name)  FROM table_name  WHERE column_name operator  value GROUP BY column_name  HAVING aggregate_function(column_name) operator value;

发表于 2020-04-12 21:58:13 回复(0)
group by 后跟 having
发表于 2023-11-20 23:31:57 回复(0)
where后面不能跟聚合函数,聚合函数可以和分组函数和Having放在一起使用
发表于 2022-11-14 11:45:04 回复(0)
group by 后不能用where
发表于 2022-08-19 16:57:31 回复(0)
count()属于聚集函数,where后面不能接聚集函数
发表于 2022-04-12 23:17:21 回复(0)
where来约束数据库中的数据,是在结果返回前作用,不能使用聚合函数。
having过滤声明,查询结果返回后,对查询结果进行过滤操作,可以使用聚合函数。

发表于 2022-03-19 13:06:31 回复(0)