mysql - 在 Mysql 中按 DATE_FORMAT 分组错误

标签 mysql sql laravel

有如下查询模型:

return \DB::table('clients')->select(DB::raw("
            DATE_FORMAT(result_test.created_at, '%M %e %Y') AS day,
            COUNT(result_test.id) AS passed"))
            ->leftJoin('result_test', 'result_test.client_id', '=', 'clients.id')
            ->where('clients.doctor_id', $user_id)
            ->whereBetween('result_test.created_at', array($startDate, $endDate))
            ->orderBy('result_test.created_at')
            ->groupBy('day')
            ->get();

请注意:

DB::raw("
                DATE_FORMAT(result_test.created_at, '%M %e %Y') AS day,
                COUNT(result_test.id) AS passed")

之后,我尝试按 AS day 对行进行分组:

->groupBy('day')

我收到了这个错误信息:

42000/1055 - db.result_test.created_at' isn't in GROUP BY

查询有什么问题?

当我删除它时:->orderBy('result_test.created_at') 它开始工作了。为什么?

最佳答案

你得到这个是因为 'result_test.created_at' 不在选择的组中。

return \DB::table('clients')->select('result_test.created_at',DB::raw("
            DATE_FORMAT(result_test.created_at, '%M %e %Y') AS day,
            COUNT(result_test.id) AS passed"))
            ->leftJoin('result_test', 'result_test.client_id', '=', 'clients.id')
            ->where('clients.doctor_id', $user_id)
            ->whereBetween('result_test.created_at', array($startDate, $endDate))
            ->orderBy('result_test.created_at')
            ->groupBy('day')
            ->get();

希望这对您有所帮助。

关于mysql - 在 Mysql 中按 DATE_FORMAT 分组错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50657940/

相关文章:

mysql - 从具有重复值的表中返回所需结果的查询

sql - 按值数组搜索 jsonb 列

SQL 查询从多个表中获取不同的行

php - 有人可以使用 PDO 给出基本 "user"对象系统的完美示例吗?

MySQL查找仅替换整个数字

mysql - 想知道sql语句是否正确

php - 在一个页面中显示两次 laravel 分页链接

javascript - usemin 为输入 Assets 文件使用了错误的目录

javascript - Blade 中通过 Ajax 将变量发送到 Controller

MySQL明显的计数,如果条件独特