SELECT p.rfid, SUM(d.intake) AS amount
FROM pig_basic p LEFT JOIN daily_food_intake d ON p.rfid = d.rfid
GROUP BY p.rfid
ORDER BY p.rowid
WHERE amount = 0; -- 錯誤位置
SQL 執行順序為:FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY。
WHERE 不能使用聚合函數結果(如 SUM())或列別名(amount),且必須寫在 GROUP BY 之前。
HAVING 專門用於過濾分組後的聚合結果,但不能使用 SELECT 列別名,需重寫聚合表達式。
SELECT p.rfid, SUM(d.intake) AS amount
FROM pig_basic p
LEFT JOIN daily_food_intake d ON p.rfid = d.rfid
GROUP BY p.rfid
HAVING SUM(d.intake) = 0 -- 使用聚合表達式,不可用 amount
ORDER BY p.rowid;