加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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),我有以下错误:

ERROR: column “table_a.creation_date_time” must appear in the
GROUP BY clause or be used in an aggregate function
LINE 5: ORDER BY
table_a.creation_date_time DESC

如果我添加GROUP BY table_a.creation_date_time,它会给我一个包含N行的表.
我已经阅读了很多关于DBMS如何允许您省略GROUP BY子句中的列的内容.现在,我只是困惑.

对于那些好奇的人来说,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的“标准”查询行为

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读