Questa domanda è stato ispirato da questo [chiuso] ed è praticamente identico a questo uno , ma utilizzando diversi RDBMS di (PostgreSQL vs MySQL).
Supponiamo di avere un elenco di tumori (questi dati sono simulati da dati reali):
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');
Vuoi scoprire quale particolare tumore era più comune in un determinato mese - finora tutto bene!
Ora noterai che per il mese 1 del 2017 c'è un pareggio - quindi non ha alcun senso sceglierne uno a caso e darlo come risposta - quindi i legami devono essere inclusi - questo rende il problema molto più impegnativo.
La risposta corretta è:
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
Un ulteriore vantaggio sarebbe quello di far apparire il nome del mese come testo anziché come numero intero.
Ho una soluzione, ma è piuttosto complessa: mi piacerebbe sapere se la mia soluzione è ottimale o meno. Il violino di MySQL è qui !