SQL 命令未正确结束添加必须限制要显示的数据集

SQL command not properly ended adding Having to limit data set to display

我正在努力将数据集限制为仅包含 sum(a)+sum(b)>avg(a.inv) 我在这里做错了什么?

`SELECT a.product pno,substr(b.descriptn,1,40) pdesc, 
avg(a.inv) i,avg(a.badinv) q, avg(a.wipc) invc, avg(a.wipq) 
invq, sum(a) suma, sum(b) sumb, sum(c) sumc, sum(d) sumd
FROM temp2 a, mastertbl b 
a.product =b.product 
GROUP BY a.product, b.descriptn 
HAVING sum(sum(a)+sum(b)) > avg(a.inv)
ORDER BY a.product;`

having 子句中不需要嵌套的 sum()。你可能想要:

HAVING sum(a) + sum(b) > avg(a.inv)

旁注:始终使用标准的显式连接而不是 old-shool 隐式连接 - 事实上,您的查询缺少 WHERE 子句。此外,有意义的 table 别名使查询更易于编写和阅读。我会这样表述:

SELECT 
    t.product pno,
    substr(m.descriptn,1,40) pdesc, 
    avg(t.inv) i,
    avg(t.badinv) q, 
    avg(t.wipc) invc, 
    avg(t.wipq) invq, 
    sum(a) suma, 
    sum(b) sumb, 
    sum(c) sumc, 
    sum(d) sumd
FROM temp2 t
INNER JOIN mastertbl m ON m.product = t.product 
GROUP BY t.product, m.descriptn 
HAVING HAVING sum(a) + sum(b) > avg(t.inv)
ORDER BY t.product

在此 multi-table 查询中,您应该使用它们所属的 table 限定 all 列名称:这适用于列 a, b, c, d.

我的建议是:

SELECT *
  FROM
  (
    SELECT 
      t.product pno,
      substr(m.descriptn,1,40) pdesc, 
      avg(t.inv) i,
      avg(t.badinv) q, 
      avg(t.wipc) invc, 
      avg(t.wipq) invq, 
      sum(a) suma, 
      sum(b) sumb, 
      sum(c) sumc, 
      sum(d) sumd
    FROM temp2 t
    INNER JOIN mastertbl m ON m.product = t.product 
    GROUP BY t.product, m.descriptn ) 
WHERE suma + sumb > i
ORDER BY pno