【发布时间】:2018-09-21 22:09:30
【问题描述】:
我正在开发一个在本地使用 SQLite 的项目,现在当移动到 PostGres(在 Heroku 上)时,我的查询报告了一个错误“r.social 必须出现在 GROUP BY 子句中或用于聚合函数中”
原来的查询是:
SELECT DISTINCT c.name, r.social, c.description, p.price
FROM cryptomodels_coin c
LEFT JOIN cryptomodels_coinprice p
ON p.coin_id = c.name
LEFT JOIN cryptomodels_CoinRating r
ON r.coin_id = c.name
GROUP BY c.name
这在本地运行良好,每个硬币返回一个唯一的行
当我将它添加到 PostGres 环境时,它抛出了上面提到的聚合函数错误 - 我设法通过将所有列添加到“Group by”子句来解决这个问题,如下所示:
SELECT DISTINCT c.name, r.social, c.description, p.price
FROM cryptomodels_coin c
LEFT JOIN cryptomodels_coinprice p
ON p.coin_id = c.name
LEFT JOIN cryptomodels_CoinRating r
ON r.coin_id = c.name
GROUP BY c.name, r.social, c.description, p.price
问题是我现在每个硬币都有重复的行
我已经阅读并尝试了许多解决方案,其中一些会引发错误,而另一些仍然会导致重复行,真的不知道如何继续,谢谢您的帮助
编辑以获取更多信息: 每个硬币都有许多价格和许多评级,cryptomodels_coin 表被其他表引用,使用它的名称作为“coin_id”,例如三个硬币:
Coin table:
| Name |
--------
| 0X |
| XSV |
| BTC |
Price table:
| Coin_id | Price |
-------------------
| 0X | 43.2 |
| XSV | 20.0 |
| BTC | 99999|
Rating table:
| Coin_id | Social|
-------------------
| 0X | 20,000|
| XSV | 12,000|
| BTC | 5,0000|
编辑2:
CREATE TABLE "cryptomodels_coin" (
"name" varchar(200) NOT NULL PRIMARY KEY,
"description" text NOT NULL);
CREATE TABLE "cryptomodels_coinprice" (
"id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
"price" real NULL,
"coin_id" varchar(200) NOT NULL REFERENCES "cryptomodels_coin" ("name") );
CREATE TABLE "cryptomodels_coinrating" (
"id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
"social" text NULL, "coin_id" varchar(200) NOT NULL REFERENCES "cryptomodels_coin" ("name"));
添加了 SQLFiddle: http://sqlfiddle.com/#!15/9fcff/1 谢谢!
【问题讨论】:
-
你能提供一些测试数据吗?
-
在表
cryptomodels_coinrating中,列social是否真的引用了cryptomodels_coin中的name。如果是这样,则您的数据样本不一致。
标签: django postgresql sqlite duplicates