Sql 结束where子句
我希望使用over()得到这样的结果: 我目前正在使用这个:Sql 结束where子句,sql,postgresql,window-functions,Sql,Postgresql,Window Functions,我希望使用over()得到这样的结果: 我目前正在使用这个: 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, U
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';
另一种选择是既不使用窗口函数也不使用公共表表达式:
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';
什么更简单?。。跳过第一步以计算平均值?。。语义较短?。为什么在这种情况下使用CTE?为什么不直接查询到表呢?我听说过使用分区的OVER(),这就是我所说的什么更简单?。。跳过第一步以计算平均值?。。语义较短?。为什么在这种情况下使用CTE?为什么不直接查询到表呢?我听说过使用partitoning的OVER(),这就是我所说的