I Beispieldaten (Ergebnistabelle), die wie wiederholt:Konvertieren älterer MySQL-Skript Postgres 9.5
year,teacher, score, class, state
2016, Jones, 80, math 102, NC
2016, Smith, 66, history, KY
2016, Jones, 40, math 101, SC
2014, Jones, 60, science, AK
ich eine neue Übersichtstabelle (Lehrer) erstellen möchten, die Lehrer umfasst, Score mittelt, Jahr und von Lehrern bestellt Klasse:
teacher, average, class, state
Jones, 60, 2016, math, NC SC
Mein ursprünglichen (älteren) mysql Skript sah ähnlich wie:
SELECT
teacher, class,
AVG(case when class rlike 'match' THEN score END) tlevel_avg,
GROUP_CONCAT(DISTINCT(state) order by state SEPARATOR ' ')
FROM results
group by teacher
order by tlevel_avg desc
where year like '2012'
es e In Datei portiert.
Ich habe versucht, das gleiche Ergebnis mit Postgres zu bekommen, aber ich erhalte einzigartige Lehrer mit dem gleichen Daten für jeden (presumabley, weil ich eine select für avg erstellt, ohne in dem für Lehrer-Wert)
bin ich nicht sicher, wie um diese Abfrage so zu organisieren, dass avg sich auf einen bestimmten Lehrer bezieht.
SELECT distinct teacher,
(select AVG(CASE when results.class SIMILAR TO '%math%' THEN results.score END) as training_level_avg from results)
(select AVG(CASE when results.class SIMILAR TO '%science%' THEN results.score END) as training_level_avg from results)
FROM RESULTS
WHERE teacher NOT LIKE '%temporary%'
AND results.year = '2011'
GROUP by results.teacher
Hauptsächlich ein Jahr gegeben durch Lehrer gruppiert Ich versuche, die Daten zurückgegeben mit korrekt berechneten Mittelwerte für alle Vorkommen für die Klasse zu erhalten, aber ich muss auch dieses Ergebnis auf eine andere Tabelle ‚Lehrer‘ schreiben (Bonus-Frage).
Jede Hilfe meine über den Buckel bekommen wird sehr geschätzt
Wenn Sie ersetzen 'group_concat()' mit 'string_agg()' und verwenden Sie 'Gruppe nach Lehrer, Klasse ', die Sie wollen Sie wollen. –