sum case when 两行
时间: 2024-07-30 16:01:22 浏览: 74
"SUM CASE WHEN" 是 SQL 查询语言中的一种表达式,用于聚合数据并根据特定条件计算总和。它通常用于 `SELECT` 语句中,特别是涉及到分组统计的时候。这里的 "CASE WHEN" 是条件判断结构,允许你在计算值时,根据一个或多个条件对结果进行不同的处理。
例如:
```sql
SELECT column1,
SUM(CASE
WHEN condition1 THEN value1
WHEN condition2 THEN value2
ELSE 0 -- 如果没有满足条件,给定默认值
END) AS total_value
FROM table_name
GROUP BY column1;
```
在这个例子中,`column1` 是你想按其分类的数据,`condition1` 和 `condition2` 是判断依据,如果 `column1` 满足条件1,就将对应的 `value1` 加到总和;满足条件2则加 `value2`,如果没有满足条件,则默认添加 0。最后,`SUM` 函数会对每个组内的条件求和。
相关问题
$result = DB::table('table_name') ->select(DB::raw('SUM(CASE WHEN status="A" THEN amount ELSE 0 END) AS sum_a'), DB::raw('SUM(CASE WHEN status="B" THEN amount ELSE 0 END) AS sum_b'), DB::raw('SUM(CASE WHEN status="C" THEN amount ELSE 0 END) AS sum_c'), DB::raw('SUM(CASE WHEN status="D" THEN amount ELSE 0 END) AS sum_d')) ->get();如果里面两条重合了where我想获取sum和count()
如果您需要在查询中包含 `WHERE` 子句,并且想要同时计算金额总和和行数,您可以添加一个额外的 `SELECT` 子句来计算行数。例如,您可以这样编写查询:
```php
$result = DB::table('table_name')
->select(DB::raw('SUM(CASE WHEN status="A" THEN amount ELSE 0 END) AS sum_a'),
DB::raw('SUM(CASE WHEN status="B" THEN amount ELSE 0 END) AS sum_b'),
DB::raw('SUM(CASE WHEN status="C" THEN amount ELSE 0 END) AS sum_c'),
DB::raw('SUM(CASE WHEN status="D" THEN amount ELSE 0 END) AS sum_d'),
DB::raw('COUNT(*) AS count'))
->where('some_column', '=', 'some_value')
->get();
```
这将返回一个包含五列的结果集:`sum_a`、`sum_b`、`sum_c`、`sum_d` 和 `count`,它们分别表示满足条件的行的金额总和和行数。请注意,`COUNT(*)` 表示计算所有行的行数,不管它们是否满足 `WHERE` 子句中的条件。如果您只想计算满足条件的行数,可以使用 `COUNT(column_name)`,其中 `column_name` 是一个非空列的名称。
DB::raw('SUM(CASE WHEN status="C" THEN 1 END) AS num_c'), DB::raw('SUM(CASE WHEN status="C" THEN amount END) AS sum_c'))这两个可以放一条进行吗
是的,您可以将两个 `CASE` 表达式合并为一个,以避免重复扫描行。以下是修改后的查询:
```php
$result = DB::table('table_name')
->select(DB::raw('SUM(CASE WHEN status="A" THEN amount END) AS sum_a'),
DB::raw('SUM(CASE WHEN status="B" THEN amount END) AS sum_b'),
DB::raw('SUM(CASE WHEN status="C" THEN 1 ELSE 0 END) AS num_c'),
DB::raw('SUM(CASE WHEN status="C" THEN amount END) AS sum_c'))
->get();
```
这将返回四个列:`sum_a`、`sum_b`、`num_c` 和 `sum_c`,其中 `num_c` 列现在包括满足 `status="C"` 条件的行数。
阅读全文