oracle用case when计数,SUM统计使用CASE WHEN
时间: 2023-07-12 19:06:15 浏览: 158
当需要在Oracle数据库中进行统计时,可以使用CASE WHEN语句对数据进行条件分组,并使用SUM函数对分组后的数据进行求和。
例如,假设有一个orders表,其中包含订单信息和订单状态。要计算每个状态的订单数和总金额,可以使用以下查询:
```
SELECT
status,
COUNT(CASE WHEN status = 'completed' THEN 1 ELSE NULL END) as num_completed_orders,
COUNT(CASE WHEN status = 'cancelled' THEN 1 ELSE NULL END) as num_cancelled_orders,
SUM(CASE WHEN status = 'completed' THEN amount ELSE 0 END) as total_completed_amount,
SUM(CASE WHEN status = 'cancelled' THEN amount ELSE 0 END) as total_cancelled_amount
FROM orders
GROUP BY status;
```
在这个查询中,我们使用了CASE WHEN语句将数据按照订单状态进行分组,然后使用COUNT和SUM函数对每个分组内的数据进行统计。注意,在COUNT函数中,我们使用了NULL代替0,这是为了避免对不存在的订单状态进行计数。
使用类似的方法,可以对其他字段进行分组和统计。
相关问题
MySQL--case when的用法 以及 利用case when 和 group by 实现行转列不使用复合函数
MySQL 中的 `CASE WHEN` 是一种条件语句,用于根据指定的条件返回不同的值。它的基本语法如下:
```sql
CASE
WHEN condition_1 THEN result_1
WHEN condition_2 THEN result_2
[ ... ]
ELSE default_result
END as column_name
```
在这个结构中,如果 `condition_1` 为真,则返回 `result_1`;如果满足 `condition_2`,则返回 `result_2`,依此类推。如果所有条件都不满足,则会执行 `ELSE` 后面的 `default_result`。
当你需要利用 `CASE WHEN` 和 `GROUP BY` 结合对数据进行分组并转换数据类型时,例如将分类的数据转换为计数或平均值等,可以这样做:
```sql
SELECT
category,
COUNT(*) AS count,
AVG(sales) AS avg_sales
FROM
your_table
GROUP BY
CASE
WHEN category = 'A' THEN 'Category A'
WHEN category = 'B' THEN 'Category B'
ELSE 'Other'
END
```
这里,我们首先根据 `category` 列的值应用 `CASE WHEN` 来决定新的类别名,然后按新类别进行分组(`GROUP BY`),计算每个组的行数(`COUNT(*))` 和平均销售额(`AVG(sales)`).
请注意,在某些数据库系统中,如Oracle,你可能会遇到性能问题,因为 `CASE WHEN` 内部的计算可能会触发多次的行扫描。在这种情况下,避免复合函数(如 `AVG`、`SUM` 等)直接作用于 `CASE` 结构通常是更好的做法。
阅读全文