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
我正在努力将数据集限制为仅包含 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