postgresql – 列必须出现在GROUP BY子句中或用于聚合函数
发布时间:2020-12-13 15:52:41 所属栏目:百科 来源:网络整理
导读:我正在更新Qt软件,使其兼容SQLite和PostgreSQL. 我有一个C方法,用于计算给定子句的给定表的元素. 在SQLite中,以下工作并给了我一个数字N(计数). SELECT COUNT(*) FROM table_a INNER JOIN table_b ASON table_b.fk_table_a = table_a.idWHERE table_a.start_
我正在更新Qt软件,使其兼容SQLite和PostgreSQL.
我有一个C方法,用于计算给定子句的给定表的元素. 在SQLite中,以下工作并给了我一个数字N(计数). SELECT COUNT(*) FROM table_a INNER JOIN table_b AS ON table_b.fk_table_a = table_a.id WHERE table_a.start_date_time <> 0 ORDER BY table_a.creation_date_time DESC 使用PostgreSQL(我使用9.3),我有以下错误:
如果我添加GROUP BY table_a.creation_date_time,它会给我一个包含N行的表. 对于那些好奇的人来说,C方法是: static int count(const QString &table,const QString &clauses = QString("")) { int success = -1; if (!table.isEmpty()) { QString statement = QString("SELECT COUNT(*) FROM "); statement.append(table); if (!clauses.isEmpty()) { statement.append(" ").append(clauses) ; } QSqlQuery query; if(!query.exec(statement)) { qWarning() << query.lastError(); qWarning() << statement; } else { if (query.isActive() && query.isSelect() && query.first()) { bool ok = false; success = query.value(0).toInt(&ok); if (ok == false) { success = -1; return success; } } } } return success; } 解决方法
如果你只是在表上进行计数(*)以获得单个标量值结果,那么肯定按现在的顺序已经过时了?
解 删除过时的顺序,以获得跨多个dbms的“标准”查询行为 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |