$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金额不是条数
时间: 2024-01-28 11:03:31 浏览: 52
如果您想要对金额进行求和而不是对条数进行求和,那么您需要将 `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' 的行的金额总和。
相关问题
$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 1 ELSE 0 END) AS num_c'), DB::raw('SUM(CASE WHEN status="C" THEN amount ELSE 0 END) AS sum_c')) ->get();咋来优化
您可以将 `SUM()` 函数应用于金额列,以避免在 `CASE` 表达式中使用 `ELSE 0`,因为这样会在每行上执行一个条件表达式。同时,您还可以使用条件表达式 `status="C"` 的结果来计算 'C' 状态的行数。这样可以使查询更加高效。以下是修改后的查询:
```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 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`,它们分别包含 `status` 为 'A'、'B'、'C' 的行的金额总和和行数。请注意,在 `CASE` 表达式中不使用 `ELSE` 子句将使未满足条件的行的值为 `NULL`,这对于计算金额总和是没有影响的。
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;
```
这样就可以分别获取三个不同状态的记录数了。
阅读全文