[英]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.