sql - 结束于 where 子句

标签 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);

最佳答案

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

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';

关于sql - 结束于 where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42575308/

相关文章:

php - 选择日期大于当前日期的每个用户最近日期的行

sql - 我可以在 SQL Server 2005 中选择查询的 where 条件中使用列号而不是列名吗?

sql - 区别和秩序

python - 如何使用 SQLAlchemy 连接到 Amazon Redshift 中的集群?

sql - SSMS:如何仅返回每个月/年最后一行的值而不是每一行?

mysql - 使用sql查找源和最终目的地

javascript - PHP添加JavaScript函数将数据返回到数据库

python - 使用 python 测试 postgresql 数据库时出错

sql - 使用 postgresql 更新基于其他列的列

sql - 窗口函数 : PARTITION BY one column after ORDER BY another