• SQL题1——查询所有购入商品为两种或两种以上的购物人记录


    题目1:假设顾客购物表 customer_shopping 结构如下:

    customer     commodity     amount

    A      甲      2

    B      乙      4

    C      丙      1

    A      丁      2

    B      丙      5

    ......

    请写出Sql查询所有购入商品为两种或两种以上的购物人记录;

    create table customer_shopping(
    customer varchar2(10),
    commodity varchar2(10),
    amount number(20)
    )
    
    insert into customer_shopping(customer ,commodity ,amount ) values ('A','甲',2);
    insert into customer_shopping(customer ,commodity ,amount ) values ('B','乙',4);
    insert into customer_shopping(customer ,commodity ,amount ) values ('C','丙',1);
    insert into customer_shopping(customer ,commodity ,amount ) values ('A','丁',2);
    insert into customer_shopping(customer ,commodity ,amount ) values ('B','丙',5);
    
    select count(commodity),customer from customer_shopping group by customer having count(commodity)>=2;
    --having后不能跟select后的别名,因为先加载having

    题目2:假设学生成绩表student_score结构如下:

    name course score

    张青    语文    72
    王华    数学    72
    张华    英语    81
    张燕    物理    70
    张青    化学    76

    ......

    请写出SQL查询出所有“张”姓学生中成绩大于75分的学生信息;

    create table student_score(
           name varchar2(10),
           course varchar2(10),
           score number(20)
    )
    
    insert into student_score(name,course,score) values ('张青','语文',72);
    insert into student_score(name,course,score) values ('王华','数学',72);
    insert into student_score(name,course,score) values ('张华','英语',81);
    insert into student_score(name,course,score) values ('张青','物理',62);
    insert into student_score(name,course,score) values ('张燕','物理',70);
    insert into student_score(name,course,score) values ('张青','化学',76);
    
    --select * from student_score where name like '张%'
    
    select avg(score),s.name from (
    select * from student_score where name like '张%') s
    group by s.name having avg(score)>=75      --以什么条件group by 就只能查出什么,多写就不是group by语句

    题目3:假设表team结构如下:

    ID(number)    Name(varchar2)

    1                       a

    2       b

    3       b

    4       a

    5       c

    6          c

    请写出sql语句执行一个删除操作,当Name列上有相同时,只保留ID这列上值小的记录;

    例如:删除后的结果如下:

    ID(number)   Name(varchar2)

    1       a

    2       b

    3       c

    create table team(
    ID number(10),
    Name varchar2(10)
    )
    
    insert into team(ID ,Name ) values (1,'a');
    insert into team(ID ,Name ) values (2,'b');
    insert into team(ID ,Name ) values (3,'b');
    insert into team(ID ,Name ) values (4,'a');
    insert into team(ID ,Name ) values (5,'c');
    insert into team(ID ,Name ) values (6,'c');
    
    delete from team where ID not in 
    (select minID from (select min(ID) minID from team group by name));    --分组之后的id就是你要的ID,所以删除其他ID即可
    
    select * from team;

    删除前:

    删除后:

  • 相关阅读:
    个人项目作业
    软件工程个人博客作业
    软件工程热身作业
    OO第四单元作业总结
    OO第三单元作业总结
    OO第二单元作业总结
    酸甜苦辣皆阅历,悲欢离合尽人生——软件工程个人总结
    Centos7里yum出问题可以试试
    idea 报错 Two modules in a project cannot share the same content root
    关于本地git的补充
  • 原文地址:https://www.cnblogs.com/timingstarts/p/12691102.html
Copyright © 2020-2023  润新知