我遇到了SQL的语法问题。我在这里要做的是将每个订单支付的所有金额(每个支付)加在一起,然后只选择那些大于特定订单#(1008)的每个支付金额之和的金额。我一直试图在这里移动许多不同的东西,我没有运气。
这就是我现在所拥有的,尽管我有很多不同的东西。尝试使用它只会返回一个未正确结束的SQL语句错误。你们给予的任何帮助都将不胜感激。我必须在这里的任何地方使用DISTINCT吗?
SELECT ORDER#,
TO_CHAR(SUM(PAIDEACH), '$999.99') AS "Amount > Order 1008"
FROM ORDERITEMS
GROUP BY ORDER#
WHERE TO_CHAR > (SUM (PAIDEACH))
WHERE ORDER# = 1008;
答案 0 :(得分:2)
某些版本的SQL将哈希字符(#
)视为注释的开头。其他人使用双连字符(--
),有些人同时使用。所以,我的第一个想法是你的ORDER#
字段命名不正确(虽然我无法想象引擎会让你创建一个具有该名称的字段)。
您有两个WHERE
个关键字,这是不允许的。如果您有多个WHERE
条件,则必须使用布尔逻辑将它们链接在一起,并使用AND
和OR
个关键字。
WHERE
之后你的GROUP BY
条件应该被撤销。在WHERE
之前指定GROUP BY
条件。
您的WHERE
条件之一毫无意义。 TO_CHAR > (SUM(paideach))
:TO_CHAR()是一个函数,据我所知是一个Oracle函数,它根据指定的格式将数值转换为字符串。 SQL Server中的等效项是CAST
or CONVERT
。
我猜你正在尝试编写一个查找金额超过特定值的订单的查询,但不是很清楚,因为你的WHERE
条件之一指定订单号应为1008,可能只会返回一条记录。
查询应该看起来更像这样:
SELECT order,
SUM(paideach) AS amount
FROM orderitems
GROUP BY order
HAVING amount > 999.99;
这将从orderitems
表中选择paideach
总和超过999.99的记录。
我不确定订单1008是如何适应的,所以你必须详细说明。
答案 1 :(得分:1)
其他人评论了您的查询有些错误。我会尝试提供更明确的提示,说明我认为你需要做些什么才能得到我认为你正在寻找的结果。
问题似乎分为不同的部分,首先找到你接近的每个订单的总数,我想可能是从以下开始:
SELECT ORDER#, SUM(PAIDEACH) AS AMOUNT
FROM ORDERITEMS
GROUP BY ORDER#;
...查找特定订单的总数:
SELECT SUM(PAIDEACH)
FROM ORDERITEMS
WHERE ORDER# = 1008;
......并将它们结合起来,这就是你被困住的地方。最简单的方法,也希望你最近教过的东西,是使用HAVING
后面的GROUP BY
子句,它可以作为一种可以应用于聚合列的过滤器(你不能在WHERE
子句中做到这一点。如果您有固定金额,您可以这样做:
SELECT ORDER#, SUM(PAIDEACH) AS AMOUNT
FROM ORDERITEMS
GROUP BY ORDER#
HAVING SUM(PAIDEACH) > 5;
(注意,由于@Bridge表示你不能使用列别名AMOUNT
,在having子句中,你必须重复聚合函数SUM
)。但是您没有固定值,您希望使用订单1008的实际总数,因此您需要将该固定值替换为另一个查询。我会让你采取最后一步......
答案 2 :(得分:0)
我不熟悉甲骨文,因为它是家庭作业我不会给你答案,只是对我认为错误的一些想法。
select语句应该只有一个where语句 - 当然可以有多个条件,只能用逻辑运算符分隔(任何计算结果为true的东西都会包含在内)。例如。 :WHERE (column1 > column2) AND (column3 = 100)
分组语句应在WHERE
条款
您不能通过别名来引用您在同一语句的where子句中的select中别名的列。例如,这不起作用:
SELECT column1 as hello
FROM table1
WHERE hello = 1
如果有group by
,您选择的列应与该声明中的列(或其聚合)相同。 This页面比我更好地解释了这一点。