之前,我们使用mysql作为数据库,但是当我们迁移到postgresql时,我们遇到了这个问题。
SQLSTATE[42803]: Grouping error: 7 ERROR: column "table.id" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT COUNT(*) FROM (SELECT * FROM (SELECT * FROM "kv_firmw...
^
The SQL being executed was: SELECT COUNT(*) FROM (SELECT * FROM (SELECT * FROM "kv_firmware_release" ORDER BY "id" DESC) "table" GROUP BY "filename") "c"
我在Yii2搜索模型中有这段代码。
$subquery = new Query;
$subquery->select(['*']);
$subquery->from('kv_firmware_release')->orderBy('id DESC');
$query = new Query;
$query->select(['*']);
$query->from(['table' => $subquery])->groupBy('filename');
$query->limit(5);
这是我第一次使用Psql。它之前工作正常,但现在它给了我错误。我怎样才能在Yii2中解决这个问题?
答案 0 :(得分:0)
这很简单,mysql是可选的,将所有列放在字段列表和group by子句中,在postgres和其他数据库中必须放入所有列。
因此,当您使用聚合时,在字段中列出您将使用的列,避免使用不必要的字段。
Mysql例子
stringWithFormat
在Postgres中
SELECT id, name, email FROM contact GROUP BY id
答案 1 :(得分:0)
group by
时,在PostgreSQL中您必须在select
或unique or primary key
例如
SELECT id, name, email FROM contact GROUP BY id, name, email
OR
SELECT id, name, email FROM contact GROUP BY id
当列id
为primary or unique key
时,将工作