作者cutekid (可爱小孩子)
看板Database
标题Re: [SQL ] 关於聚合函数,和计算周数的两个问题
时间Mon Jun 3 15:05:33 2019
第一题:
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
: 以上两个问题麻烦大家帮解了,感恩
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.170.107.108 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Database/M.1559545536.A.D64.html
1F:推 ken218: 第二个问题用 WEEK 来算不是比较好吗? 06/06 22:33
2F:→ ken218: Select * from person where week(生日) = week(now()) 06/06 22:34
3F:→ ken218: 第一题我现在会用 rank() 或是 row_number() 06/06 22:35
4F:推 ken218: 啊,原原po 讲到用 week 的问题,我疏忽了,sorry 06/06 22:55
5F:→ cutekid: 跨年的那一周,用week也没办法解 06/06 23:08
6F:推 ken218: 试了一下,搭配使用 date_add, dayofweek, curdate 可以查 06/06 23:26
7F:→ ken218: 出今日相关的本周启抑日期,应该有用 06/06 23:26
8F:→ cutekid: 赞喔,要不要回一篇分享一下做法(Y) 06/07 08:11
9F:→ cutekid: 我发现我也没解决跨年同一周的问题XD 06/07 09:04