使4个链接表SQL查询工作时出现问题

使4个链接表SQL查询工作时出现问题,sql,join,aggregate-functions,libreoffice-base,Sql,Join,Aggregate Functions,Libreoffice Base,我有4张桌子: 客户(客户ID(主键)、名、姓) 订单(订单ID(主键)、客户ID(FK)) 采购(订单ID(FK)、游戏ID(FK)、数量) 游戏(游戏ID(PK),零售价) 我想列出订单总额超过150美元的所有客户的姓名 我的作品: SELECT "p"."OrderID", SUM("p"."Quantity" * "g"."RetailPrice") "TotalPrice" FROM "Purchase" "p" JOIN "Games" "g" O

我有4张桌子:

  • 客户(客户ID(主键)、名、姓)
  • 订单(订单ID(主键)、客户ID(FK))
  • 采购(订单ID(FK)、游戏ID(FK)、数量)
  • 游戏(游戏ID(PK),零售价)
我想列出订单总额超过150美元的所有客户的姓名

我的作品:

SELECT 
    "p"."OrderID", SUM("p"."Quantity" * "g"."RetailPrice") "TotalPrice"
FROM 
    "Purchase" "p" 
JOIN 
    "Games" "g" ON ("p"."GameID" = "g"."GameID")
GROUP BY 
    "p"."OrderID"
HAVING 
    SUM("p"."Quantity" * "g"."RetailPrice") >= 150
我尝试加入customer和order表,这很有效,但一旦我尝试选择firstname和lastname列,它就不起作用了;我犯了一个错误

不在聚合函数或group by子句中


我在网上看到的关于聚合函数和联接表的解释都不足以让我理解我需要做些什么来实现这一点。什么是正确的查询?为什么是正确的查询?

这是针对哪个RDBMS的?请添加一个标记,以指定您使用的是
mysql
postgresql
sqlserver
oracle
还是
db2
——还是完全其他的。libreofficebase。
SUM
是一个聚合函数。因此,
SELECT
中的所有项目必须是自身聚合的,或者出现在
分组中。您需要做的是将您的工作查询用作子查询,并将其他表连接到子查询。噢,似乎通过将firstname和lastname添加到groupby解决了这个问题。我可以发誓我试过了…LO Base不是引擎的名字。它可以嵌入
hsqldb
(较旧)或
firebird
(较新)。或者,它可以与其他引擎(如
mysql
)一起使用splitdb设置。将来,您应该确定您正在使用的引擎,然后添加适当的标记。这是用于哪个RDBMS的?请添加一个标记,以指定您使用的是
mysql
postgresql
sqlserver
oracle
还是
db2
——还是完全其他的。libreofficebase。
SUM
是一个聚合函数。因此,
SELECT
中的所有项目必须是自身聚合的,或者出现在
分组中。您需要做的是将您的工作查询用作子查询,并将其他表连接到子查询。噢,似乎通过将firstname和lastname添加到groupby解决了这个问题。我可以发誓我试过了…LO Base不是引擎的名字。它可以嵌入
hsqldb
(较旧)或
firebird
(较新)。或者,它可以与其他引擎(如
mysql
)一起使用splitdb设置。将来,您应该确定正在使用的引擎,然后添加适当的标记。
SELECT 
    "c"."FirstName", "c"."LastName", 
    "p"."OrderID", SUM("p"."Quantity" * "g"."RetailPrice") "TotalPrice"
FROM 
    "Customer" "c" 
JOIN 
    "Order" "o" ON "c"."CustomerID" = "o"."CustomerID" 
JOIN 
    "Purchase" "p" ON "o"."OrderID" = "p"."OrderID" 
JOIN  
    "Games" "g" ON ("p"."GameID" = "g"."GameID")
GROUP BY 
    "p"."OrderID"
HAVING 
    SUM("p"."Quantity" * "g"."RetailPrice") >= 150