SQL查询中出现奇怪的WHERE子句;WHERE(SELECT...)=3

igsr9ssn  于 2022-10-15  发布在  PostgreSQL
关注(0)|答案(2)|浏览(160)

通常在SQL查询中使用WHERE子句,在其中我们从表中检查是否满足条件,但使用以下代码:

SELECT name
FROM teacher as T1
WHERE (
SELECT COUNT (DISTINCT T2.salary)
FROM teacher as T2
WHERE T2.salary > T1.salary
) = 3;

以下子查询Sub返回一个数字。

(SELECT COUNT (DISTINCT T2.salary)
FROM teacher as T2
WHERE T2.salary > T1.salary)

但我不明白我们怎么检查WHERE Sub = 3,这对我来说没有意义。你能解释一下吗?
整个查询找到了第四高的教师工资。

68de4m5k

68de4m5k1#

您可以在任何可以使用表达式的地方使用子查询,那么为什么不能在相等运算符的左侧使用呢?
但这种解决问题的方式相当难看。好呀

SELECT name
FROM (SELECT DISTINCT ON (salary)
             name, salary
      FROM teacher) AS t
ORDER BY salary DESC
OFFSET 3 FETCH FIRST 1 ROWS ONLY;
eyh26e7m

eyh26e7m2#

下面的查询可能更全面:

WITH T AS
(
SELECT name, COUNT(*) OVER(ORDER BY salary) AS N
FROM teacher as T1
)
SELECT name
FROM   T 
WHERE  N > 3

相关问题