【发布时间】:2013-05-31 22:18:16
【问题描述】:
通过在 PG 9.1 上使用 libpq,我正在尝试编写查询以从具有最高索引“my_id”的行中获取值:
SELECT my_id, col2, col3
FROM mytable
WHERE my_id = MAX(my_id)
这给了我错误:
错误:WHERE 子句中不允许聚合...
如何正确编写这样的查询?
【问题讨论】:
标签: sql postgresql greatest-n-per-group
通过在 PG 9.1 上使用 libpq,我正在尝试编写查询以从具有最高索引“my_id”的行中获取值:
SELECT my_id, col2, col3
FROM mytable
WHERE my_id = MAX(my_id)
这给了我错误:
错误:WHERE 子句中不允许聚合...
如何正确编写这样的查询?
【问题讨论】:
标签: sql postgresql greatest-n-per-group
SELECT my_id, col2, col3 FROM mytable WHERE my_id = (select MAX(my_id) FROM mytab)
或使用
SELECT my_id, col2, col3 FROM mytable ORDER BY my_id DESC LIMIT 1
【讨论】:
如果您的目标是获取具有最高 my_id 值的行,那么以下查询应该达到相同的目标。
SELECT my_id, col2, col3
FROM mytable
ORDER BY my_id DESC
LIMIT 1
【讨论】:
只需通过my_id 订购,并仅使用limit 1 获取第一条记录
SELECT my_id, col2, col3
FROM mytable
order by my_id desc
limit 1
另一种但性能较差的方法是
SELECT my_id, col2, col3
FROM mytable
where my_id = (select max(my_id) from mytable)
【讨论】:
子查询可以帮到你
SELECT my_id, col2, col3 FROM mytable WHERE my_id = (select MAX(my_id) FROM mytable)
【讨论】:
当您在 my_id 上有索引时,带有子查询的索引应该更快。当您没有索引时,请使用“order by”。 (obv. 取决于相关的数据库大小)
【讨论】:
LIMIT 1 查询。