0

我有这个 sql 查询的问题,查询是不言自明的,所以看看它会告诉你我有什么问题

SELECT customer.customerid, 
       paymentdata.paidamount, 
       paymentdata.balanceamount, 
       sum(paymentreceipt.paidamount) AS Expr1 
FROM   customer 
       INNER JOIN paymentdata 
               ON customer.customerid = paymentdata.customerid 
       INNER JOIN paymentreceipt 
               ON customer.customerid = paymentreceipt.customerid 
GROUP  BY customer.customerid 
4

5 回答 5

2

您在 group by 中缺少一些术语。除聚合列外,所有列都需要包括在内。

于 2013-05-31T07:46:22.310 回答
2

那么你想如何计算其他列,你只分组,customerid但你也想显示paymentdata.paidamountpaymentdata.balanceamountpaymentreceipt.paidamount

考虑到该组为每个组返回多行,因此 sql-server(或除 MySql 之外的任何其他 rdbms)不知道您要为未分组的列显示哪一行。如果您不想选择单行,则必须聚合该列。因此,例如通过使用SUM,或:COUNTMAXAVG

例如:

SELECT customer.customerid, 
       MAX(paymentdata.paidamount) AS MaxPaid, 
       AVG(paymentdata.balanceamount) AS AverageBalance, 
       SUM(paymentreceipt.paidamount) AS ReceiptPaidSum
FROM   customer 
       INNER JOIN paymentdata 
               ON customer.customerid = paymentdata.customerid 
       INNER JOIN paymentreceipt 
               ON customer.customerid = paymentreceipt.customerid 
GROUP  BY customer.customerid 
于 2013-05-31T07:47:53.500 回答
1

您需要对 group by 子句中未使用的列使用聚合函数

SELECT customer.customerid, 
       sum(paymentdata.paidamount), 
       sum(paymentdata.balanceamount), 
       sum(paymentreceipt.paidamount) AS Expr1 
FROM   customer 
       INNER JOIN paymentdata 
               ON customer.customerid = paymentdata.customerid 
       INNER JOIN paymentreceipt 
               ON customer.customerid = paymentreceipt.customerid 
GROUP  BY customer.customerid 
于 2013-05-31T07:46:54.193 回答
0
SELECT customer.customerid,paymentdata.customerid,paymentreceipt.customerid  
       paymentdata.paidamount, 
       paymentdata.balanceamount, 
       paymentreceipt.paidamount AS Expr1 
FROM   customer,paymentdata,paymentreceipt
       INNER JOIN paymentdata 
               ON customer.customerid = paymentdata.customerid 
       INNER JOIN paymentreceipt 
               ON customer.customerid = paymentreceipt.customerid 
GROUP  BY customer.customerid,paymentdata.customerid,paymentreceipt.customerid 
于 2013-05-31T07:45:48.813 回答
0

如果您正在进行聚合,那么您可能需要聚合函数:

SELECT customer.customerid, 
       sum(paymentdata.paidamount), 
       sum(paymentdata.balanceamount), 
       sum(paymentreceipt.paidamount) AS Expr1 
FROM   customer 
       INNER JOIN paymentdata 
               ON customer.customerid = paymentdata.customerid 
       INNER JOIN paymentreceipt 
               ON customer.customerid = paymentreceipt.customerid 
GROUP  BY customer.customerid 

这可能仍然无法为您提供正确的数字,因为您正在获得付款和收据的交叉连接。如果您想要更好的答案,那么您应该在问题中提供示例数据和预期结果。

于 2013-05-31T07:48:01.240 回答