[英]How to retrieve a certain number of records using GROUP BY and ORDER BY in SQL (postgres)?
考虑一个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条记录。
还有其他替代方法可以解决此问题吗? 提前致谢。
尝试这个。 通常,您先限制它,然后再组/计数它
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;
我不太确定您是否要在1000 LIMIT
条件之内或之外使用q_id
。 但是您可以轻松地将其移至GROUP BY
之上以更改行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.