Re: [SQL ] 关于聚合函数,和计算周数的两个问题

楼主: cutekid (可爱小孩子)   2019-06-03 15:05:33
第一题:
select t1.*
from 成绩 t1 inner join (
select 课程,max(分数) as 分数,from 成绩 group by 课程
) t2 on t1.课程 = t2.课程 and t1.分数 = t2.分数
第二题:
create table person (birthday date);
insert into person values
('2000-06-01'),('2000-06-02'),('2000-06-03'),
('2000-06-04'),('2000-06-05'),('2000-06-06'),
('2000-06-07'),('2000-06-08'),('2000-06-09');
select *
from person
where
datediff(date_format(birthday,concat(year(curdate()),'-%m-%d')),curdate()) =
(weekday(date_format(birthday,concat(year(curdate()),'-%m-%d'))) + 1) % 7 -
(weekday(curdate()) + 1) % 7;
说明: 1. 先将 birthday 调整到今年日期
2. 判断“日期差距”是否等于“weekday差距”
注: (weekday(date) + 1) % 7 是把星期日 ~ 星期六调成 0 ~ 6
3. 这样即使跨年,也可以判断是否在同一周
网址: https://bit.ly/2JT5DQ8
※ 引述《sagwow (不是我)》之铭言:
: 数据库名称:MySQL
: 数据库版本:
: 内容/问题描述:
: 大家好,小弟这边有两个问题想请教。
: 第一个问题关于聚合函数,我有一个资料表"成绩",有三个字段 课程 学生 分数,
: 我想选出每个课程中最高分的人:
: select 课程, max(分数)
: from 成绩
: group by 课程
: 但这样我只能得到每个课程对应到的最高分,有简便办法得到该分数所对应到的学生吗?
: 现在我只想得到这种作法:
: select 学生
: from 成绩
: where (课程, 分数) in (select 课程, max(分数) from 成绩 group by 课程)
: ==========================================================================
: 第二个问题关于生日,
: 我有一个资料表"学生资料",里面有学生的生日(年-月-日),
: 如果要判断学生是否在这周生日要怎么做呢?
: 如果是判断这个月的话很简单,但不知道怎么去判断生日是否和今天在同一周@@a
: 以上两个问题麻烦大家帮解了,感恩
作者: ken218 (ken218)   2019-06-06 22:33:00
第二个问题用 WEEK 来算不是比较好吗?Select * from person where week(生日) = week(now())第一题我现在会用 rank() 或是 row_number()啊,原原po 讲到用 week 的问题,我疏忽了,sorry
楼主: cutekid (可爱小孩子)   2019-06-06 23:08:00
跨年的那一周,用week也没办法解
作者: ken218 (ken218)   2019-06-06 23:26:00
试了一下,搭配使用 date_add, dayofweek, curdate 可以查出今日相关的本周启抑日期,应该有用
楼主: cutekid (可爱小孩子)   2019-06-07 08:11:00
赞喔,要不要回一篇分享一下做法(Y)我发现我也没解决跨年同一周的问题XD

Links booklink

Contact Us: admin [ a t ] ucptt.com