结束where子句

时间:2017-03-03 09:37:36

标签: sql postgresql window-functions

我希望使用over()获得这样的结果:

Id | Name | Salary | Average |
1  | User1| 1000   | 2000 |

我目前正在使用这个:

WITH users AS (
   SELECT us_id, us_name, us_salary, avg(us_salary) over()
   FROM t_user_us
)
SELECT *
FROM users
WHERE us_name = 'User 1';

是否可以以更简单的方式进行?

声明:

CREATE TABLE T_USER_US (
   US_id SERIAL PRIMARY KEY,
   US_name VARCHAR(40) NOT NULL,
   US_salary INTEGER NOT NULL 
);
INSERT INTO T_USER_US ("us_name","us_salary")
VALUES ('User 1',1000), ('User 2',2000), ('User 3',3000);

1 个答案:

答案 0 :(得分:2)

另一个选择是既不使用窗口函数也不使用公用表表达式:

SELECT us_id, 
       us_name, 
       us_salary, 
       (select avg(us_salary) from t_user_us) as avg_salary
FROM t_user_us
WHERE us_name = 'User 1';