繁体   English   中英

如何正确使用 CASE WHEN 与 laravel Eloquent?

[英]how to correctly use CASE WHEN with laravel Eloquent?

我想显示通话和聊天秒数,我需要在不重复 session_id 的情况下对数据进行分组,为此我使用 CASE WHEN 指定如果 type = "chat" 它只显示我的聊天记录,而 type = "call" 只显示通话那些

但问题是 WHEN CASE 仅向我显示聊天类型并将 null 值添加到通话中。

我的代码

$sub = DB::table('session_details')
    ->select('session_id',
    DB::raw('CASE WHEN type = "chat" THEN time_in_secs END AS chat_time_sec'),
    DB::raw('CASE WHEN type = "call" THEN time_in_secs END AS call_time_sec'),
    DB::raw('ROUND(SUM((spent_points/'.$valor_poinst_value->puntos_por_dolar.')),2) as total_sales'))
    ->whereIn('session_id', $ids_session)
    ->whereDate('created_at','>=',$from)
    ->whereDate('created_at','<=',$to)
    ->groupBy('session_id')
    ->get();

数据结果我的查询代码

{
    "session_id": "-N5fKtOYHJNvSy6Jj0Lj",
    "chat_time_sec": 5,
    "call_time_sec": null,
    "total_sales": "0.05"
},
{
    "session_id": "-N5fLhJ_kEa7RZWpASLu",
    "chat_time_sec": 7,
    "call_time_sec": null,
    "total_sales": "0.30"
}...

我希望得到的结果

{
    "session_id": "-N5fKtOYHJNvSy6Jj0Lj",
    "chat_time_sec": 5,
    "call_time_sec": 15,
    "total_sales": "0.05"
},
{
    "session_id": "-N5fLhJ_kEa7RZWpASLu",
    "chat_time_sec": 7,
    "call_time_sec": 15,
    "total_sales": "0.30"
}

您需要在您的案例中添加一个聚合 function,MAX 应该可以解决问题

$sub = DB::table('session_details')
    ->select('session_id',
    DB::raw('MAX(CASE WHEN type = "chat" THEN time_in_secs END) AS chat_time_sec'),
    DB::raw('MAX(CASE WHEN type = "call" THEN time_in_secs END) AS call_time_sec'),
    DB::raw('ROUND(SUM((spent_points/'.$valor_poinst_value->puntos_por_dolar.')),2) as total_sales'))
    ->whereIn('session_id', $ids_session)
    ->whereDate('created_at','>=',$from)
    ->whereDate('created_at','<=',$to)
    ->groupBy('session_id')
    ->get();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM