mysql - LARAVEL, ELOQUENT, SQL - groupBy 1
问题描述
当我手动运行以下 SQL 时,我得到了预期的结果。我正在尝试在 Laravel 的 Eloquent 中编写相同的查询,但出现错误:
SQLSTATE [42000]:语法错误或访问冲突:1056 无法在“聚合”上分组(SQL:从内部连接中选择计数()daily_menu
作为meals
聚合。daily_menu
= id
。meals
左daily_menu_id
连接fruits
。= fruits
。其中= 1 按 1 分组)*meal_id
meals
id
lodge_id
有效的原始 SQL 查询:
SELECT
d.id,
SUM(IF(f.id IS NULL, 0, 1)) AS fruit_count
FROM daily_menu d
JOIN meals m
ON d.id = m.daily_menu_id
LEFT JOIN fruits f
ON m.id = f.meal_id
GROUP BY 1
我的 Laravel 雄辩的实现:
$query = $query
->select("daily_menu.id", DB::raw("SUM(IF(fruits.id IS NULL, 0, 1)) AS fruit_count"))
->join("meals", "daily_menu.id", "=", "meals.daily_menu_id")
->leftJoin("fruits", "fruits.meal_id", "=", "meals.id")
->groupBy(DB::raw("1"));
解决方案
$query = $query
->select("daily_menu.id", DB::raw("SUM(IF(fruits.id IS NULL, 0, 1)) AS fruit_count"))
->join("meals", "daily_menu.id", "=", "meals.daily_menu_id")
->leftJoin("fruits", "fruits.meal_id", "=", "meals.id")
->groupBy(DB::raw("daily_menu.id"));
我不应该使用 1 我应该使用正确的列别名。相关:无法解决此问题:“无法按聚合分组”
推荐阅读
- sql - 将 varchar 转换为 Decimal 时出错
- html - 如何使用beautifulsoup获取另一个标签内的span标签内的文本?
- powershell - 遍历多个值的行
- android - dispatchTouchEvent 中的 ACTION_UP 事件被延迟触发
- entity-framework - 尝试从 SAP HANA DB 创建实体模型时出现连接错误
- javascript - 如何使用引导程序 4 按钮组向复选框表单添加最大值
- linux - 如何在不使用 inotifywait 的情况下监视目录的文件更改?
- azure - 创建 Visual Studio Team System 帐户时,我可以使用我们公司的 Azure AD 作为用户存储吗?
- rest - 在 REST API 中处理用户偏好/状态
- c++ - 可变参数模板和继承的默认值