需要帮助进行学校练习,我不知道为什么 SUM 在这里不起作用


SELECT 
F.numero, 
SUM (SELECT (C.unidades * P.preco)
FROM linhafatura C, produto P)
WHERE (C.produto = P.ean13)
AND (C.produto = L.produto)
AND (C.fatura = L.fatura))
FROM fatura F, linhafatura L
WHERE (F.numero = L.fatura);

我在SQL live中测试了一下,结果显示

ORA-00936:缺失表达

这是一个非常有用的错误

(我确信所介绍的表格和数据都是正确的,因为代码是由我的老师编写的)

任何帮助都可以接受,谢谢

您的查询在FROM linhafatura C, produto P)之后额外的右括号并且您需要将相关的子查询包装在()括号内,因此您有一组用于SUM()函数的括号和另一组用于子查询的括号并且您还需要GROUP BY子句:

SELECT F.numero, 
SUM(
(
SELECT (C.unidades * P.preco)
FROM   linhafatura C, produto P
WHERE  (C.produto = P.ean13)
AND    (C.produto = L.produto)
AND    (C.fatura = L.fatura)
)
) AS value
FROM   fatura F,
linhafatura L
WHERE  (F.numero = L.fatura)
GROUP BY
f.numero;

可以不加括号重写为:

SELECT F.numero, 
SUM(
(
SELECT C.unidades * P.preco
FROM   linhafatura C, produto P
WHERE  C.produto = P.ean13
AND    C.produto = L.produto
AND    C.fatura = L.fatura
)
) AS value
FROM   fatura F,
linhafatura L
WHERE  F.numero = L.fatura
GROUP BY
f.numero;

,再次用现代ANSI连接重写(而不是30年前遗留的逗号连接语法):

SELECT F.numero, 
SUM (
(
SELECT C.unidades * P.preco
FROM   linhafatura C
INNER JOIN produto P
ON C.produto = P.ean13
WHERE  C.produto = L.produto
AND    C.fatura = L.fatura
)
) AS value
FROM   fatura F
INNER JOIN linhafatura L
ON F.numero = L.fatura
GROUP BY
f.numero;

小提琴

注意:根据你的数据,你可能会得到错误:ORA-01427: single-row subquery returns more than one rowfiddle

相关内容

  • 没有找到相关文章

最新更新