sql中 count(group by ST.操作日期) over(group by ST.操作日期,ST.状态划分) 计数 为什么报错,怎么修改
时间: 2023-08-17 16:11:56 浏览: 80
这个SQL语句报错的原因是因为在窗口函数(OVER函数)中,GROUP BY子句和聚合函数(COUNT函数)不能同时使用。
如果您想要在同一查询中计算每个分组的行数和每个状态划分中每个分组的行数,可以使用两个不同的窗口函数进行计算。例如,可以使用以下SQL语句:
```
SELECT ST.操作日期, ST.状态划分, COUNT(*) OVER(PARTITION BY ST.操作日期) AS 行数, COUNT(*) OVER(PARTITION BY ST.操作日期, ST.状态划分) AS 状态行数
FROM 表名 AS ST;
```
上述SQL语句中,第一个窗口函数用于计算每个操作日期的行数,第二个窗口函数用于计算每个操作日期和状态划分的行数。其中,PARTITION BY子句用于指定分组的列。这样就可以同时计算每个分组的行数和每个状态划分中每个分组的行数了。
相关问题
sql中 count(ST.订单号) over(group by ST.操作日期,ST.状态划分) 计数, 为什么报错,怎么修改
这个SQL语句报错的原因是因为在窗口函数(OVER函数)中,GROUP BY子句和聚合函数(COUNT函数)不能同时使用。
如果您想要在同一查询中计算每个分组的行数和每个状态划分中每个分组的行数,可以使用两个不同的窗口函数进行计算。例如,可以使用以下SQL语句:
```
SELECT ST.操作日期, ST.状态划分, COUNT(ST.订单号) OVER(PARTITION BY ST.操作日期) AS 行数, COUNT(ST.订单号) OVER(PARTITION BY ST.操作日期, ST.状态划分) AS 状态行数
FROM 表名 AS ST;
```
上述SQL语句中,第一个窗口函数用于计算每个操作日期的行数,第二个窗口函数用于计算每个操作日期和状态划分的行数。其中,PARTITION BY子句用于指定分组的列。这样就可以同时计算每个分组的行数和每个状态划分中每个分组的行数了。
需要注意的是,在窗口函数中使用COUNT函数时,必须指定一个列名,例如上述SQL语句中的ST.订单号。
sql不用groupby怎么实现分组
如果不使用 GROUP BY 子句,可以使用子查询或者窗口函数来实现分组的效果。
使用子查询:
```
SELECT column1, COUNT(column2) as count
FROM table
WHERE column3 = 'condition'
AND column4 = 'condition'
AND column5 = 'condition'
AND column1 IN (SELECT DISTINCT column1 FROM table)
```
使用窗口函数:
```
SELECT DISTINCT column1, COUNT(column2) OVER (PARTITION BY column1) as count
FROM table
WHERE column3 = 'condition'
AND column4 = 'condition'
AND column5 = 'condition'
```
这些查询会根据 column1 进行分组,并且返回每组的计数。请注意,这些查询的执行效率可能不如使用 GROUP BY 子句的查询效率高。
阅读全文