Mysql面试题

1,找出id最大的且其余字段相同的重复数据,且在这基础上保留id最大的那条数据

  •   SELECT MAX(id) AS id, col1, col2, col3
      FROM table_name
      GROUP BY col1, col2, col3
      HAVING COUNT(*) > 1
    
  • 首先根据 col1、col2 和 col3 进行分组,然后使用
    HAVING COUNT(*) > 1 找出重复数据(即分组后存在两个及以上的元素)。最后使用 MAX(id) 求出每组中 id 最大的那个元素,并别名为 id。

2,有一张 学生信息表,(姓名,学号,班级),找出所有姓名相同人的记录?

  •   #将按照姓名进行分组,并计算每个姓名出现的次数。然后,使用 HAVING 子句筛选出出现次数大于 1 的姓名,即找出所有姓名相同的记录
      SELECT name, COUNT(*) as count
      FROM student
      GROUP BY name
      HAVING count > 1; 
      #再做外层查询
      SELECT name, student_id, class
      FROM student
      WHERE name IN (
          SELECT name
          FROM student_info
          GROUP BY name
          HAVING COUNT(*) > 1
      );
    

3,将表转为横向表

  • SELECT (@id := @id + 1) AS id, name,
           MAX(CASE WHEN course = '语文' THEN score END) AS 语文,
           MAX(CASE WHEN course = '数学' THEN score END) AS 数学,
           MAX(CASE WHEN course = '英语' THEN score END) AS 英语
    FROM tb_student, (SELECT @id := 0) AS init
    GROUP BY name;
    
    

先根据name进行分组,再进行聚合

MAX(CASE WHEN course = ‘语文’ THEN score END) AS 语文 是一个条件表达式,用于计算语文成绩的最大值,并将结果命名为 “语文”。

满足条件 course = ‘语文’ 时返回对应的 score 值,否则返回 NULL。

使用 MAX() 聚合函数对这个条件表达式的结果进行聚合操作,以获取满足条件的最大值。如果没有满足条件的值,则返回 NULL。

添加一个递增的ID列 ,使用MySQL的自增变量和子查询来实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Latity

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值