yingqiao2011 2014-06-23 13:57
浏览 172
已采纳

查询语句效率问题求教

场景描述
假定有一考勤表(t_kaoqin)存储某班级学生的所有考勤记录,有如下字段
No(学号),name(姓名),kaoqin(考勤结果:1——早退,2——正常出勤,3——迟到),现要统计某段时间内所有学生的考勤情况,查询结果要求如下:
学号 姓名 早退 正常出勤 迟到
01 张三 10 50 20
02 李四 5 55 4

…… …… ……
执行语句
SELECT k.No 学号,k.name 姓名, (SELECT COUNT(*) FROM t_kaoqin WHERE No=k.No AND kaoqin ='1') 早退, (SELECT COUNT(*) FROM t_kaoqin WHERE No=k.No AND kaoqin ='2') 正常出勤, (SELECT COUNT(*) FROM t_kaoqin WHERE No=k.No AND kaoqin ='3') 迟到 FROM t_kaoqin k GROUP BY No
数据库为MySQL,感觉执行效率很差,求教效率更高的写法,谢谢大家的指导!!

  • 写回答

2条回答 默认 最新

  • binggouxsm 2014-06-23 15:44
    关注

    select k.No 学号,k.name 姓名 , sum( case kaoqin when '1' then 1 else 0) as 早退, sum( case kaoqin when '2' then 1 else 0) as 正常出勤 , sum( case kaoqin when '3' then 1 else 0) as 迟到 FROM t_kaoqin k GROUP BY No , name

    差不多这个意思,实际上就是个行转列的问题,这种有很多例子,你可以参考下。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 java和硬件交互问题
  • ¥15 前台多人编辑时怎么让每个人保存刷新都互不干扰
  • ¥20 如何用Python删除单元格内连续出现的重复词?
  • ¥15 WangEditor嵌入到geeker-admin中,回车没有办法换行
  • ¥30 stm32f103c8t6制作万能红外遥控器
  • ¥15 有人会fastcrud写前端页面吗
  • ¥15 如何解除Uniaccess管控
  • ¥15 微信小程序跳转关联公众号
  • ¥15 Java AES 算法 加密采用24位向量报错如何处理?
  • ¥15 使用X11可以找到托盘句柄,监控到窗口点击事件但是如何在监听的同时获取托盘中应用的上下文菜单句柄