MySQL使用GROUP BY和HAVING统计当日商务人员预约数问题求助
错误原因
- 行级过滤逻辑不应该写在HAVING子句中:HAVING是对GROUP BY分组后的聚合结果做过滤,日期过滤属于单条记录的前置过滤,需要放到WHERE子句中
- 字段名错误加了单引号:
date('created_at')会把created_at识别为字符串常量,而非表字段,永远无法匹配到当前日期 - 未查询分组字段:SELECT子句只返回了统计数量,缺少商务人员ID字段,无法对应到每个商务的统计结果
正确原生MySQL查询
如果只需要返回商务ID和对应数量,后续自行拼接格式:
SELECT id_comercial, COUNT(id) AS appoint_count FROM cita WHERE DATE(created_at) = CURDATE() GROUP BY id_comercial;
如果需要直接在SQL中拼接成你需要的commercial X - Y格式:
SELECT CONCAT('commercial ', id_comercial, ' - ', COUNT(id)) AS result FROM cita WHERE DATE(created_at) = CURDATE() GROUP BY id_comercial;
注:你提供的测试数据中所有记录的created_at都是2020-08-11,测试时可以把
CURDATE()替换为'2020-08-11'即可看到统计结果。
Laravel Eloquent 查询
首先确保你已经创建了对应cita表的模型App\Models\Cita,查询代码如下:
use App\Models\Cita; use Illuminate\Support\Facades\DB; $statistics = Cita::select('id_comercial', DB::raw('COUNT(id) as appoint_count')) ->whereRaw('DATE(created_at) = CURDATE()') ->groupBy('id_comercial') ->get(); // 拼接成需要的格式 $formatted = $statistics->map(function ($item) { return "commercial {$item->id_comercial} - {$item->appoint_count}"; })->toArray();
内容的提问来源于stack exchange,提问作者scorpions78
相关产品推荐
相关产品推荐

