首页 > 解决方案 > LARAVEL, ELOQUENT, SQL - groupBy 1

问题描述

当我手动运行以下 SQL 时,我得到了预期的结果。我正在尝试在 Laravel 的 Eloquent 中编写相同的查询,但出现错误:

SQLSTATE [42000]:语法错误或访问冲突:1056 无法在“聚合”上分组(SQL:从内部连接中选择计数(daily_menu作为meals聚合。daily_menu= idmealsdaily_menu_id连接fruits。= fruits。其中= 1 按 1 分组)*meal_idmealsidlodge_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"));

标签: mysqllaraveleloquentgroup-by

解决方案


$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 我应该使用正确的列别名。相关:无法解决此问题:“无法按聚合分组”


推荐阅读