select * ,row_number() over (partition by site_id, order by site_longitude,site_latitude) as row_s, sum(cells) over (partition by site_longitude order by site_latitude) as cells_s from wwx1249869.pr01_sid2s4g_20230601152305178 where row_s=1;修改为正确的sql语句
时间: 2024-03-09 10:49:22 浏览: 15
根据您提供的 SQL 语句,我发现其中的 `row_s` 是在 `where` 子句中被引用的,但是 `where` 子句中不能使用窗口函数,因此需要将 `where` 子句中的 `row_s=1` 移到一个子查询中。同时,由于 `row_s` 是在 `select` 子句中被定义的,因此需要使用别名替代。修改后的 SQL 语句如下所示:
```
SELECT *
FROM (
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY site_id ORDER BY site_longitude, site_latitude) AS row_s,
SUM(cells) OVER (PARTITION BY site_longitude ORDER BY site_latitude) AS cells_s
FROM wwx1249869.pr01_sid2s4g_20230601152305178
) t
WHERE t.row_s = 1;
```
这样就可以正确地筛选出每个 `site_id` 分组中 `site_longitude` 和 `site_latitude` 最小的记录,并且在结果中包含每个 `site_longitude` 分组中 `cells` 的累加和。
相关问题
select *, row_number()over(partition by id order by salary desc) ranking
这是一个使用`row_number()`函数和`over()`子句的SQL查询语句,用于在每个id分组中按照salary降序排列,并为每个分组中的行分配一个排名。下面是两个例子:
引用的例子:
```sql
with t as (
select *, row_number() over(partition by id order by salary desc) ranking
from tmp_learning_mary
)
select * from t where ranking = 1;
```
这个例子使用了一个公共表表达式(CTE)`t`,在其中使用`row_number()`函数为每个id分组中的行分配了一个排名。然后,查询选择了排名为1的行,即每个分组中的最高薪水行。
引用的例子:
```sql
select * from (
select *, row_number() over(partition by id order by rand()) ranking
from tmp_learning_mary
) t where t.ranking = 1;
```
这个例子与引用的例子类似,只是在`order by`子句中使用了`rand()`函数,它会随机排序每个分组中的行。然后,查询选择了排名为1的行,即每个分组中的随机行。
select * row_number () over (partition by grid_longitude order by grid_latitude)as rn from wwx1249869.pr01_sulvjingzhengfenxi_no001__046098修改
这是一个 SQL 查询语句,使用了窗口函数 `ROW_NUMBER()`。
`ROW_NUMBER()` 函数用于给结果集中的每一行分配一个唯一的序号。在这个查询中,`ROW_NUMBER()` 函数被用于为每个 `grid_longitude` 分区中的行分配一个序号,按照 `grid_latitude` 的顺序进行排序。
最终的查询结果会包含 `rn` 列,表示每个 `grid_longitude` 分区中行的序号。