I have a C method for calculating the elements of a given table of a given sub-sentence.
< /p>
In SQLite, the following works and gives me a number N (count).
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
Use PostgreSQL (I use 9.3), I have the following error:
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
If I add GROUP BY table_a.creation_date_time, it will give me a table with N rows.
I have read it A lot about how DBMS allows you to omit the content of the column in the GROUP BY clause. Now, I am just confused.
For those who are curious, the C method is:
< /p>
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;
}
Solution
Remove outdated sequences to obtain “standard” query behavior across multiple dbms
I am updating the Qt software to make it compatible with SQLite and PostgreSQL.
I have a C method for calculating the elements of a given table of a given sub-sentence.
In SQLite, the following Worked and gave me a number N (count).
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
Using PostgreSQL (I use 9.3), I have the following error:
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
If I add GROUP BY table_a.creation_date_time, it will give me a table with N rows.
I have read a lot about how DBMS allows you to omit the GROUP BY clause The content of the column in. Now, I’m just confused.
For those who are curious, the C method is:
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) ;< br /> }
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;
}
< /p>
If you just count (*) on the table to get a single scalar value result, then must it be out of date in the current order?
Solution
Remove outdated sequences to obtain “standard” query behavior across multiple dbms