SUM(CASE WHEN status="A" and id = 2 THEN 1 ELSE 0 END)这样可以吗
时间: 2024-02-23 14:59:59 浏览: 14
是的,您可以在 `SUM(CASE...)` 表达式中添加更多的条件来实现更精细的统计。
例如,如果您需要同时统计状态为 A 且 ID 为 2 的记录数,可以在 `SUM(CASE...)` 表达式中添加相应的条件,例如:
```
SUM(CASE WHEN status="A" AND id=2 THEN 1 ELSE 0 END) AS count_a_and_id_2
```
这样就可以统计出状态为 A 且 ID 为 2 的记录数了,并将结果保存在 `count_a_and_id_2` 字段中。类似地,您可以根据具体的需求添加更多的条件来实现更复杂的统计。
相关问题
SELECT SUM(CASE WHEN status='A' THEN 1 ELSE 0 END) AS count_a, SUM(CASE WHEN status='B' THEN 1 ELSE 0 END) AS count_b, SUM(CASE WHEN status='C' THEN 1 ELSE 0 END) AS count_c FROM table_name;用laravel的orm来实现一下
可以使用 Laravel 的 Eloquent ORM 的聚合函数和条件查询来实现这个查询。具体实现如下:
```
$result = DB::table('table_name')
->select(DB::raw('SUM(CASE WHEN status="A" THEN 1 ELSE 0 END) AS count_a'),
DB::raw('SUM(CASE WHEN status="B" THEN 1 ELSE 0 END) AS count_b'),
DB::raw('SUM(CASE WHEN status="C" THEN 1 ELSE 0 END) AS count_c'))
->get();
```
在这个查询中,使用了 `DB::table()` 方法来创建一个查询构建器,然后使用 `select()` 方法来指定查询的列。在这里,我们使用了 `DB::raw()` 方法来指定原始的 SQL 表达式,用于实现 CASE WHEN 条件查询和 SUM 聚合函数。最后使用 `get()` 方法来执行查询,并返回查询结果。
执行查询后,可以通过 `$result` 变量来获取查询结果,例如:
```
$count_a = $result[0]->count_a;
$count_b = $result[0]->count_b;
$count_c = $result[0]->count_c;
```
这样就可以分别获取三个不同状态的记录数了。
$result = DB::table('table_name') ->select(DB::raw('SUM(CASE WHEN status="A" THEN 1 ELSE 0 END) AS count_a'), DB::raw('SUM(CASE WHEN status="B" THEN 1 ELSE 0 END) AS count_b'), DB::raw('SUM(CASE WHEN status="C" THEN 1 ELSE 0 END) AS count_c'), DB::raw('SUM(CASE WHEN status="D" THEN 1 ELSE 0 END) AS count_d')) ->get();我要sum金额不是条数
如果您想要对金额进行求和而不是对条数进行求和,那么您需要将 `SUM()` 函数应用于金额列,而不是条件表达式。例如,如果您有一个名为 `amount` 的列,您可以将查询修改为以下内容:
```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'))
->get();
```
这将返回四个列:`sum_a`,`sum_b`,`sum_c` 和 `sum_d`,它们分别包含 `status` 为 'A'、'B'、'C' 和 'D' 的行的金额总和。