作者angle065 (Fu)
看板Soft_Job
标题Re: [请益] 请问 MySQL 推荐书籍
时间Sat Aug 25 20:57:57 2018
嗨,各位三百万大大
想针对原文的SQL问题讨论解法是否正确
一张资料表储存 某高中 三年级 今年所有考试的分数,一共十五万笔资料
资料表栏位包:含学号、考试时间、考试分数。
然後,每三分钟问一次,每一个学生最後一次考试的分数是多少?
因为以前工作只使用过Oracle & MSSQL,最近换到MySQL,对这个问题也很困扰
之前再MSSQL或Oracle的解法是使用row_number() over(partition by)来处理
MySQL好像没有row_number()这个解法,刚刚自己尝试後的解法会变成
Select
学号,max(时间)
From table
Group by 学号
这样可以找到每个学号最後一次考试的时间
假设考试时间不重复,再join一次自己,就可以算出最後一次的分数
但若允许时间重复,这样还是无法找到答案
想请问若再Mysql要解这种题目,有什麽更好的方法吗?
※ 引述《p52189 (鼠霸)》之铭言:
: 大家好
: 因为工作需求,需要增进一些 MySQL 的能力
: 打工不算的话本人经验约一年半,使用LAMP
: 资料库只会很初级的 CRUD ,稍微复杂一点的 query 都不会
: 这里提供一个我不会写的范本:
: 一张资料表储存 某高中 三年级 今年所有考试的分数,一共十五万笔资料,资料表栏位包含:学号、考试时间、考试分数。然後,每三分钟问一次,每一个学生最後一次考试的分数是多少?
: 类似这种问题通常我可以下一些关键字在 Stack Overflow上面找到类似的发问,然後修改一下得到解答
: 或者如果考试程式是我写的,乾脆每次考试把最後一笔快取起来
: 但是这样显然不是根本的解决之道
: 所以我需要一本比 Head First 稍微进阶一点的书,让我能解一些稍微困难一点点的问题
: 书最好是中文
: 然後也不要太难…什麽「精妙的资料库语句 」、「MySQL 之美」之类的(这两本书名我瞎掰的)……那种书太难我看不懂囧
: 然後也不要整本全部都范例几乎没篇幅在讲思路的,例如「MySQL 即战一百招」(这也是我瞎掰的)这种书
: 理想的结构是先讲述一个情境,例如我文中举的高中生考试的例子,然後先示范菜鸟如何写烂 code,烂 code 发生什麽问题,如何避开这些问题,从简单的 case 到困难的
: 大概就这样……不知道会不会太罗嗦……总之请板友推荐,谢谢
: -----
: Sent from JPTT on my HTC_M9u.
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 115.43.61.37
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1535201879.A.119.html
1F:推 drajan: 设一个常数k作为行数 从原始资料表select k 学号 分数 再g 08/25 21:24
2F:→ drajan: roup by 学号 max(k)即得 08/25 21:24
谢谢你的分享,我Google也有看到这个解法
但想说有没有更简单一点的 XD
※ 编辑: angle065 (115.43.61.37), 08/25/2018 21:25:30
3F:→ drajan: 忘记说 k:=k+1 08/25 21:25
4F:→ NodeWay: 这个case 好像用nosql来做会更适合 08/25 21:38
5F:→ NodeWay: 你已经知道使用情境了 一张表存历史成绩 一张表存最新 08/25 21:38
7F:→ alan3100: windowfuntction 10年前就出现了,别浪费生命在刻东西 08/25 22:39
8F:→ alan3100: Oracle/MSSQL 2008之前就支援最基本的rownumber 08/25 22:43
9F:→ alan3100: mysql&mariadb好像在2017前後也支援, AWS-RDS今年也支援 08/25 22:44
10F:→ alan3100: 前述有windowfunction & CTE 的版本 08/25 22:45
谢谢你的分享,我再装新版的Mysql试试看,目前公司测试机5.1板不支援的样子 QQ
※ 编辑: angle065 (115.43.61.37), 08/25/2018 23:18:14