当前位置:Gxlcms > PHP教程 > 帮忙看看,如何简化这条mysql语句,并且优化查询效率~

帮忙看看,如何简化这条mysql语句,并且优化查询效率~

时间:2021-07-01 10:21:17 帮助过:6人阅读

帮忙看看,怎么简化这条mysql语句,并且优化查询效率~~~~~
本帖最后由 setoy 于 2013-12-19 12:03:34 编辑

有三张表:管理员表,部门表,和管理员对部门的打分表,如下:


现在要对每个部门的得分情况进行查询并统计,即使某个部门没有得分纪录也要显示他的得分(0分),查询统计的结果如下所示:


mysql语句一直一知半解,东拼西凑写了一段:
  1. select <br>
  2. '' as type, <br>
  3. `class`.`name` as cname, <br>
  4. `score`.`cid`, <br>
  5. `score`.`uid`, <br>
  6. `user`.`name` as uname,<br>
  7. `score`<br>
  8. from `score`<br>
  9. right join `class` on `score`.`cid` = `class`.`cid`<br>
  10. left join `user` on `score`.`uid` = `user`.`uid`<br>
  11. <br>
  12. union all(<br>
  13. select <br>
  14. '汇总', <br>
  15. `c`.`cname`, <br>
  16. `c`.`cid`, <br>
  17. `c`.`uid`, <br>
  18. count(`cid`) as uname,<br>
  19. sum(`score`) as score<br>
  20. from (<br>
  21. select <br>
  22. '' as type, <br>
  23. `class`.`name` as cname, <br>
  24. `score`.`cid`, <br>
  25. `score`.`uid`, <br>
  26. `user`.`name` as uname,<br>
  27. `score`<br>
  28. from `score`<br>
  29. right join `class` on `score`.`cid` = `class`.`cid`<br>
  30. left join `user` on `score`.`uid` = `user`.`uid`<br>
  31. ) c group by `cname`<br>
  32. )<br>
  33. <br>
  34. order by `cname` asc, `type` asc;


貌似这个sql语句太复杂了!能不能简化这条语句呢?另外从查询效率上能不能优化?
表结构、数据和代码都在这里:http://sqlfiddle.com/#!2/6f5db6/10
请帮忙看看

分享到: 更多


------解决方案--------------------
可以用一句简单的sql + 一段php程序进行实现吗
------解决方案--------------------
desc sql
对关键字段,加上索引看看

人气教程排行