laravel 如何使用不同的查询添加COUNT的另一列?

zphenhs4  于 2022-12-05  发布在  其他
关注(0)|答案(1)|浏览(109)

我有一个users表,它有end_date列,如果它是NULL,这意味着用户是活动的,如果它有一个日期戳,他不再是活动的。
我想按国家和城市对用户进行分组,并显示活动用户总数和非活动用户总数。
我已经有了显示非活动用户数量的查询:

UserData::select(
DB::raw('count(*) as not_active, country, city'))
->whereNotNull('end_date')
->groupBy('country', 'city')
->paginate('150');

上面的查询为每个组添加了一列非活动用户,但我找不到如何在上面的查询中添加第二列(带分页),以显示每个组中仍然活动的用户数。
下面的查询确实获得了正确的列,但是是单独的,我没有找到如何将它与分页查询合并:

UserData::select(
DB::raw('count(*) as active, country, city'))
->whereNull('end_date')
->groupBy('country', 'city')

结果应如下所示:

country   |    city   | active | not active
------------|-----------|--------|------------
Sweden      | Stockholm |    5   |     1
Switzerland |   Bern    |    3   |     13
xzlaal3s

xzlaal3s1#

您可以使用SUMCASE WHEN的组合。

UserData::query()
    ->select(
        country,
        city,
        DB::raw('SUM(CASE WHEN end_date IS NULL THEN 1 ELSE 0 END) AS active'),
        DB::raw('SUM(CASE WHEN end_date IS NULL THEN 0 ELSE 1 END) AS not active')
    )
    ->groupBy('country', 'city')

相关问题