Ho questa query che funziona correttamente in MySQL. Più sfondo su di esso here.Conversione di MySQL selezionare PostgreSQL
SELECT c.*, SUM(ABS(v.vote)) AS score
FROM categories c,items i, votes v
WHERE c.id = i.category_id
AND i.id = v.voteable_id
AND v.created_at > '#{1.week.ago}'
GROUP BY c.id
ORDER BY score DESC LIMIT 8;
Ho provato a eseguirlo in PostgreSQL e non è riuscito con questo messaggio di errore.
PGError: ERROR: column "c.name" must appear in the GROUP BY clause or be used in an aggregate function
non ero sicuro cosa significava, così ho provato a cambiare "c.id" a "c.name" nel gruppo dalla clausola (entrambi lavorano in MySQL stesso, assumendo il nome di un elemento è unico).
Tuttavia questo solo prodotto un altro errore simile
PGError: ERROR: column "c.id" must appear in the GROUP BY clause or be used in an aggregate function
Come può questo problema essere risolto?
Stranamente, sembra che questo sia ora consentito in Postgre 9.1 – you786
È stato rimosso in Postgre 9.2? Ricevo questo errore per gli stessi motivi. – Aaron
@Aaron: non è stato rimosso ma funziona solo quando (citando la [documentazione] (http://www.postgresql.org/docs/current/static/sql-select.html)): _la colonna non raggruppata dipende funzionalmente dalle colonne raggruppate, poiché altrimenti ci sarebbe più di un possibile valore da restituire per una colonna non raggruppata. Esiste una dipendenza funzionale se le colonne raggruppate (o un sottoinsieme di esse) sono la chiave primaria della tabella che contiene la colonna non raggruppata_ –