Special handling of COUNT aggregate function

This commit is contained in:
2026-04-12 18:23:39 +02:00
parent 27afb2ea5f
commit 56a8a0e789
+11 -5
View File
@@ -13,7 +13,7 @@
DatabaseTreeSettings::DatabaseTreeSettings(const QStringList &data, QStringList keywords, QWidget *parent) : QDialog(parent)
{
setWindowTitle(tr("Add tree filter"));
setWindowTitle(tr("Add tree grouping"));
QVBoxLayout *vlayout = new QVBoxLayout(this);
setLayout(vlayout);
@@ -324,13 +324,16 @@ QSqlQuery DatabaseTree::getGroupQuery(const QString &aggregateFunc) const
if(i == _keys.size() - 1)
{
QString tmp = aggregateFunc + "(" + cols.last() + ")";
cols.last() = tmp;
if(aggregateFunc == "COUNT")
cols.append("COUNT(*)");
else
cols.last() = tmp;
}
}
QStringList group = cols;
group.removeLast();
QString sql = "SELECT " + cols.join(',') + " FROM fits_files AS f" + join + " GROUP BY " + group.join(',');
QString sql = "SELECT " + cols.join(',') + " FROM fits_files AS f" + join + " GROUP BY " + group.join(',') + " ORDER BY " + cols.join(" NULLS LAST,") + " NULLS LAST";
QSqlQuery query(sql, _database->db());
for(auto &val : _keys)
@@ -371,7 +374,7 @@ void DatabaseTree::prepareQueries()
else if(_keys[i] == "DATE-OBS_YEAR-MONTH-DAY")
col = QString("STRFTIME('%Y-%m-%d', h%1.value)").arg(i);
sql = QString("SELECT %1 FROM fits_files AS f").arg(col) + join + where + QString(" GROUP BY %1 ORDER BY %1").arg(col);
sql = QString("SELECT %1 FROM fits_files AS f").arg(col) + join + where + QString(" GROUP BY %1 ORDER BY %1 NULLS LAST").arg(col);
qDebug() << "Tree query for" << _keys[i] << sql;
QSqlQuery query(sql, _database->db());
@@ -576,7 +579,10 @@ void DatabaseTreeView::setQuery(const QString &func)
if(!func.isEmpty())
{
QString tmp = func + "(" + keys.last() + ")";
keys.last() = tmp;
if(func == "COUNT")
keys.append("COUNT");
else
keys.last() = tmp;
}
for(auto &key : keys)
_sqlModel->setHeaderData(i++, Qt::Horizontal, key);