คำถามนี้ได้รับแรงบันดาลใจจากคนนี้ [ปิด] และเป็นจริงเหมือนกับที่นี้หนึ่งแต่ใช้ RDBMS ที่แตกต่างกัน (เทียบกับ PostgreSQL MySQL)
สมมติว่าฉันมีรายการของเนื้องอก (ข้อมูลนี้จำลองจากข้อมูลจริง):
CREATE table illness (nature_of_illness VARCHAR(25), created_at DATETIME);
INSERT INTO illness VALUES ('Cervix', '2018-01-03 15:45:40');
INSERT INTO illness VALUES ('Cervix', '2018-01-03 15:45:40');
INSERT INTO illness VALUES ('Cervix', '2018-01-03 15:45:40');
INSERT INTO illness VALUES ('Cervix', '2018-01-03 15:45:40');
INSERT INTO illness VALUES ('Cervix', '2018-01-03 15:45:40');
INSERT INTO illness VALUES ('Lung', '2018-01-03 17:50:32');
INSERT INTO illness VALUES ('Lung', '2018-02-03 17:50:32');
INSERT INTO illness VALUES ('Lung', '2018-02-03 17:50:32');
INSERT INTO illness VALUES ('Lung', '2018-02-03 17:50:32');
INSERT INTO illness VALUES ('Cervix', '2018-02-03 17:50:32');
-- 2017, with 1 Cervix and Lung each for the month of Jan - tie!
INSERT INTO illness VALUES ('Cervix', '2017-01-03 15:45:40');
INSERT INTO illness VALUES ('Lung', '2017-01-03 17:50:32');
INSERT INTO illness VALUES ('Lung', '2017-02-03 17:50:32');
INSERT INTO illness VALUES ('Lung', '2017-02-03 17:50:32');
INSERT INTO illness VALUES ('Lung', '2017-02-03 17:50:32');
INSERT INTO illness VALUES ('Cervix', '2017-02-03 17:50:32');
คุณต้องการทราบว่าเนื้องอกชนิดใดที่พบบ่อยที่สุดในเดือนนั้น ๆ - ดีมาก!
ตอนนี้คุณจะสังเกตเห็นว่าสำหรับเดือนที่ 1 ของปี 2560 มีการผูกกัน - ดังนั้นจึงไม่มีเหตุผลใดที่จะสุ่มเลือกหนึ่งตัวและให้คำตอบ - ดังนั้นต้องรวมความสัมพันธ์ด้วย - นี่ทำให้ปัญหามีความท้าทายมากขึ้น
คำตอบที่ถูกต้องคือ:
Year Month Tumour count Type
2017 1 1 Cervix -- note tie
2017 1 1 Lung -- " "
2017 2 3 Lung
2018 1 5 Cervix
2018 2 3 Lung
โบนัสเพิ่มเติมจะทำให้ชื่อเดือนปรากฏเป็นข้อความแทนที่จะเป็นจำนวนเต็ม
ฉันมีทางออก แต่มันค่อนข้างซับซ้อน - ฉันต้องการทราบว่าโซลูชันของฉันดีที่สุดหรือไม่ ซอ MySQL อยู่ที่นี่ !