我已经在这里的问题上得到了很好的答案
所以如果我创建表:
CREATE TABLE IF NOT EXISTS usedfood
(food_code int, name text, qty int, meas text);
INSERT INTO usedfood (food_code, name, qty, meas)
VALUES (10, 'spaghetti', 3, 'pcs'),
(156, 'mayonnaise', 2, 'pcs'),
(173, 'ketchup', 1, 'pcs'),
(172, 'bolognese sauce', 2, 'pcs'),
(173, 'ketchup', 1, 'pcs'),
(10, 'spaghetti', 2, 'pcs'),
(156, 'mayonnaise', 1, 'pcs');
CREATE TABLE IF NOT EXISTS ingredients
(food_code int, ingr_code int, name text, qty decimal(11,3), meas text);
INSERT INTO ingredients (food_code, ingr_code, name, qty, meas)
VALUES (10, 1256, 'spaghetti rinf', 75, 'gramm'),
(156, 1144, 'salt', 0.3, 'gramm'),
(10, 1144, 'salt', 0.5, 'gramm'),
(156, 1140, 'fresh egg', 50, 'gramm'),
(172, 1138, 'tomato', 80, 'gramm'),
(156, 1139, 'mustard', 5, 'gramm'),
(172, 1136, 'clove', 1, 'gramm'),
(156, 1258, 'oil', 120, 'gramm'),
(172, 1135, 'laurel', 0.4, 'gramm'),
(10, 1258, 'oil', 0.4, 'gramm'),
(172, 1130, 'corned beef', 40, 'gramm');
并从我的 PostgreSQL 执行此查询:
SELECT SUM(f.qty) used_times,
COALESCE(i.ingr_code, f.food_code) code,
COALESCE(i.name, f.name) name,
SUM(COALESCE(i.qty, 1) * f.qty) qty,
COALESCE(i.meas, f.meas) meas
FROM usedfood f LEFT JOIN ingredients i
ON f.food_code = i.food_code
GROUP BY i.ingr_code, i.name
...我仍然无法在SQL fiddle上得到像这样的预期结果
我收到这样的错误:
错误:“名称”第 1 行或附近的语法错误:...代码,f.food_code)代码,COALESCE(i.name,f.name)名称,SUM(...
错误:列“f.food_code”必须出现在 GROUP BY 子句中或用于聚合函数第 1 行:...LECT SUM(f.qty) used_times, COALESCE(i.ingr_code, f.food_cod...
错误:列“f.name”必须出现在 GROUP BY 子句中或用于聚合函数第 1 行:...(i.ingr_code, f.food_code) 代码,COALESCE(i.name, f.name) in ...
错误:列“i.meas”必须出现在 GROUP BY 子句中或用于聚合函数第 1 行:...me, SUM(COALESCE(i.qty, 1) * f.qty) qty, COALESCE(i .meas, f....
错误:列“f.meas”必须出现在 GROUP BY 子句中或用于聚合函数第 1 行: ...COALESCE(i.qty, 1) * f.qty) qty, COALESCE(i.meas, f .meas) 我...
此代码很可能与 postgreSQL 不完全兼容,因此请如果有人可以从查询中修复此代码以适合从 PostgreSQL 系统运行。