我有以下查询:
SELECT statement, value, level
FROM records
WHERE user_id=10 AND value IS NOT NULL and disabled IS NULL
它返回结果,如下例所示:
statement one | 1 | 3
statement two | 1 | 3
statement three | 0.5 | 4
statement four | 0.5 | 4
最后一个值是级别字段中的值,我想只选择最高数值的结果。所以在这种情况下,最高的数字是4,所以我希望它返回语句3和4结果。
我想首先查询最高的数字,然后再进行另一个查询以包含AND level=4
语法。
只是想知道它是否可以作为单个SQL查询来执行。
答案 0 :(得分:1)
with max_level as (
select max(level) as max_level
from records
)
select statement, "value", level
from records
where
user_id = 10 and
"value" is not null and
disabled is null and
level = (select max_level from max_level)
答案 1 :(得分:1)
您可以使用rank()
查找最高level
:
SELECT statement, value, level
FROM (SELECT statement, value, level, RANK() OVER (ORDER BY level DESC) AS rk
FROM records
WHERE user_id = 10 AND value IS NOT NULL AND disabled IS NULL)
WHERE rk = 1
答案 2 :(得分:0)
这使用overall
的{strong> level
最高值作为条件。
SELECT statement, "value", level
FROM records
WHERE user_id = 10
AND "value" IS NOT NULL
AND disabled IS NULL
AND level = (SELECT max(level) FROM records);
这基本上是Clodoaldo's answer的简化。子查询表达式很好,因为它返回单个值。
您的示例实际上使用结果中最高值level
作为条件。 Mureinik's answer有一个优雅的解决方案。
除此之外:value
是reserved word in standard SQL。最好不要使用as标识符,即使在Postgres中允许使用。