1

我已经在这里的问题上得到了很好的答案

所以如果我创建表:

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 系统运行。

4

1 回答 1

3

问题主要是由于 PostgreSQL(与大多数其他 RDBMS 一样,但与 MySQL 不同)要求在分组/聚合的查询中对选定的项目进行分组或聚合。尝试:

SELECT SUM(f.qty) used_times,
       COALESCE(i.ingr_code, max(f.food_code)) code,
       COALESCE(i.name, max(f.name)) "name",
       SUM(COALESCE(i.qty, 1) * f.qty) qty,
       COALESCE(max(i.meas), max(f.meas)) meas
  FROM usedfood f LEFT JOIN ingredients i
    ON f.food_code = i.food_code
 GROUP BY i.ingr_code, i.name

SQLFiddle在这里

于 2013-06-12T12:24:03.877 回答