考虑一个N列的postgresql表。一列包含二项式分类[0 1]
。我想按照以下语法将数据按此字段分组(我对python使用 psycopg2 ,对nodejs使用 pg ):
SELECT dummy_field,
COUNT(*)
FROM __table__
WHERE q_id = '2F5543E89823'
GROUP BY dummy_field
此查询返回例如:[(0, 1606), (1, 6674)]
个值。我更改了以上语法,以仅包括基于CURRENT_TIMESTAMP
的最后两天:
那将是:
...
AND date_field > CURRENT_TIMESTAMP - INTERVAL '2 days'
GROUP BY dummy_field
但是,我想在一个不同的查询中仅检索基于ORDER BY date_field DESC LIMIT 1000
的最后1000条记录。由于选择字段不包含date_field
,因此出现此错误:
列“ field .date_field”必须出现在GROUP BY子句中或在聚合函数中使用
为了避免此错误,我遵循以下语法:
SELECT dummy_field, date_field,
COUNT(*)
FROM __table__
WHERE q_id = '2F5543E89823'
GROUP BY dummy_field, date_field
ORDER BY date_field DESC LIMIT 1000
但是我不是想要的。我想使用COUNT(*)和GROUP BY dummy_field,仅考虑date_field以DESC方式排序时的最后1000条记录。
还有其他替代方法可以解决此问题吗?预先感谢。
答案 0 :(得分:1)
尝试一下。通常,您先对其进行限制,然后对它进行GROUP / COUNT
SELECT dummy_field, COUNT(*) AS rows
FROM (
SELECT dummy_field, q_id
FROM __table__
WHERE date_field > CURRENT_TIMESTAMP - INTERVAL '2 days'
AND t.q_id = '2F5543E89823'
ORDER BY date_field DESC
LIMIT 1000
) AS t
GROUP BY dummy_field
ORDER BY dummy_field;
我不太确定您是否希望q_id
符合1000 LIMIT
标准。但是您可以轻松地将其移至GROUP BY
上方以更改行为。