首页 > 试题广场 >

已知 sys_user 表的建表语句如下: 现需获取 18

[不定项选择题]
已知 sys_user 表的建表语句如下: 现需获取 18 岁以下,且姓名重复的数据,以下 SQL 语句错误的有()
  • SELECT name,age
      FROM sys_user
      WHERE age<18
      GROUP BY name;
  • SELECT name
      FROM sys_user
      WHERE age<18
      GROUP BY name
      HAVING COUNT(DISTINCT name)>1;
  • SELECT name
      FROM sys_user
      WHERE age<18
      GROUP BY name
       HAVING COUNT(name)>1;
  • SELECT name
      FROM sys_user
      WHERE age<18
      GROUP BY name
      HAVING COUNT(id)>1;
推荐
ABD
  • A选型获取的是所有18岁以下的
  • B选项DISTINCT name用于返回唯一不同的值,与题意重复相悖。
  • D选项统计的是id,和name无关。
编辑于 2019-10-08 14:12:07 回复(1)
眼见为实
A
B
C
D
由此重要可以看出C、D都可以得到结果,而要纠结的是D,为什么也可以
换一个方法   
先SELECT id,name
  FROM sys_user
  WHERE age<18;

SELECT name
  FROM sys_user
  WHERE age<18
  group by name
  having count(id)>1;
先找出年龄小于十八岁的人,按照姓名分组,如果姓名重复,count(name),count(*),count(id) 都会大于1可以筛选处理,故我的选择是AB ,若有其他数据可以进行反证,可以评论学习。
发表于 2019-10-05 14:03:20 回复(1)
1.不知是不是只有我看见了where单词拼写错误,所以按理说应该是选abcd;
2.如果排除单词拼写错误这一因素的话,错误的应该是ab;
3.分析:
    c.可以很容易看出是正确的;
    d.在查询语句上和c只有一处不同;不过因为在前面的查询语句中已经查处了age<18,且按name分过组后的符合条件的语句,加上having是要求还满足有重复名字的数据。所以其实无所谓是id,还是name。或者是count(*)都是返回一样的结果。
只是提出自己的想法,不保证对错。如果不同意这个看法的可以在下面留言说服我(其实也就是讨论)!!!

发表于 2019-10-01 11:57:49 回复(7)
离谱好吧... 手机上age<18这个条件一个选项都没显示 真的无言
发表于 2022-07-11 09:38:35 回复(0)
我觉得D也能出正确结果呀?
发表于 2022-03-05 14:50:48 回复(0)
题目在手机上显示有问题,只显示where age,后面的比较条件无法显示出来,在电脑上可以正常显示,正常显示如下

编辑于 2021-10-15 15:21:31 回复(1)
只有我这里显示BCD三个选项一模一样吗
发表于 2020-08-15 19:33:45 回复(3)
都用 GROUP BY name了,count(id) = count(name) = count(*),都是这个 group 里面的数目,所以D也正确
发表于 2020-02-18 14:27:13 回复(0)
正确的是C ,楼上两位大佬解释的非常到位!
发表于 2019-09-28 07:00:06 回复(1)
对于D答案---
如果name有NULL值,且name为NULL的数据有两条以上,分组之后是这样的。

执行SELECT name FROM sys_user WHERE age<18 GROUP BY name HAVING COUNT(name)>1;

执行SELECT name FROM sys_user WHERE age<18 GROUP BY name HAVING COUNT(id)>1;

根据ID看似可以,实则考虑不全,有些人说count(*),其实和count(id)一样会查出NULL值
发表于 2023-06-20 11:25:36 回复(1)
A :先进行where筛选,再group by分组,再select,而select中有个age在group by中没有出现,就会导致 select时要把  多条小于18岁的同名 放在一个name后面,就成了把age合并单元格,所以会报错
B:错在没有理解题目,题目中 要姓名重复的数据,distinct(name)之后就没有重复地name了
D:我的理解是在 group by 分组中,name中有多个空值且年龄小于18的数据,count(id)的话则会把空值也统计进去,而count(name)则会去空
发表于 2023-12-20 09:33:21 回复(0)
很显然d选项也是正确的,因为已经按姓名分好组了,此时count(id),count(age),count(name),count(*)都行
发表于 2023-01-14 19:15:40 回复(0)
裂大开,这么 d 好像也可以获取到数据【前提建表语句中有 id 属性】
发表于 2022-05-10 15:03:40 回复(0)
C为啥错了呢 

发表于 2022-02-28 15:00:50 回复(1)
我tm, 选项有两个having后面没东西, 然后就选了
发表于 2021-12-29 17:18:23 回复(0)
eug头像 eug
如果仅仅是查出有重复姓名的人作为结果的话:那么CD都是可以视为正确。A的话多了年龄,那么查出来的信息就不是正确的了。
发表于 2021-04-17 00:06:32 回复(0)
做这个题看了评论之后只想到了皇帝的新衣
发表于 2020-10-13 07:39:30 回复(0)
关键是少了建表语句,count函数是会忽略NULL值的
发表于 2020-03-23 21:31:14 回复(0)
这道题我看不见完整的题是什么样的啊??
发表于 2019-11-19 20:44:05 回复(0)
ABD
首先确定题目要求:
    1. age < 18;
    2. count(name) >1;
    3.错误语句
A. 里包含有不重复姓名的, 错误;
B. DISTINCT是唯一,且查寻结果中也必须包含这一项, 错误;
D. 是姓名重复,而非id, 错误。
故 选择:    ABD
发表于 2019-09-28 09:26:45 回复(0)
abd
a只是查询所有数据,然后根据name分组,这样查出来所有名字的数据
b查询的是年龄大于18且有重复名字的数据
c是正确的的
d查询的是根据名字分组且重复id大于1的

发表于 2019-09-27 20:09:23 回复(0)