Diese Frage wurde inspiriert diese [geschlossen] und ist auf diese nahezu identisch ein , jedoch unter Verwendung der verschiedenen RDBMS (PostgreSQL vs. MySQL).
Angenommen, ich habe eine Liste von Tumoren (diese Daten werden aus realen Daten simuliert):
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');
Sie möchten herausfinden, welcher bestimmte Tumor in einem bestimmten Monat am häufigsten auftrat - bisher so gut!
Jetzt werden Sie feststellen, dass es für den 1. Monat 2017 ein Unentschieden gibt - es macht also überhaupt keinen Sinn , eines zufällig auszuwählen und dies als Antwort zu geben - also müssen Unentschieden einbezogen werden -, was das Problem viel schwieriger macht.
Die richtige Antwort ist:
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
Ein weiterer Bonus wäre, dass der Monatsname als Text und nicht als Ganzzahl angezeigt wird.
Ich habe eine Lösung, aber sie ist ziemlich komplex - ich würde gerne wissen, ob meine Lösung optimal ist oder nicht. Die MySQL-Geige ist da !
Antworten:
Mein Versuch, dies zu lösen, ist wie folgt. Ich würde mich über Ratschläge freuen, wie diese Abfrage verbessert werden könnte:
Und es gibt das richtige Ergebnis, wie in der Geige hier zu sehen ist !
quelle
Mit MySQL-8.0 und CTEs erstellen wir zunächst eine
tmp
aggregierte Zählung nach Jahr / Monat /nature_of_illness
undRANK()
weisenc
dem gleichen Wert identische Werte zu , sodass das doppelte Maximum berücksichtigt wird:quelle