MySQL'de doğru şekilde çalışan bu sorguyu kullanıyorum. Daha fazla arka plan üzerinde here.MySQL'i Dönüştürme PostgreSQL'e Dönüştürme
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;
PostgreSQL'de çalıştırmayı denedim ve bu hata iletisiyle başarısız oldu.
PGError: ERROR: column "c.name" must appear in the GROUP BY clause or be used in an aggregate function
Bunu ne anlama geldiğini emin değildi, bu yüzden bir öğenin adını varsayarak maddesi (MySQL aynı hem çalışması ile gruptaki "c.name" den "c.id" değiştirerek çalıştı benzersiz).
Ancak bu sadece bu sorunun çözülebileceğini nasıl başka benzer hataüretti?PGError: ERROR: column "c.id" must appear in the GROUP BY clause or be used in an aggregate function
Garip bir şekilde, bu şimdi Postgre 9.1'de izinli gibi görünüyor. – you786
Postgre 9.2'de kaldırıldı mı? Bu hatayı aynı nedenlerle alıyorum. – Aaron
@Aaron: kaldırılmadı ancak yalnızca (belgeler [http://www.postgresql.org/docs/current/static/sql-select.html)): Aksi, gruplanmamış sütun için geri dönmek için birden fazla olası değeri olacaktır çünkü _The gruplanmamış kolon, gruplanmış sütunlarda işlevsel bağlıdır. Gruplandırılmış sütunlar (veya bunun bir alt kümesi), gruplanmamış sütunları içeren tablonun birincil anahtarıysa işlevsel bağımlılık var demektir. –