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