2013-05-31 4 views
0

им с проблемой с этим SQL-запроса, запрос само за себя, поэтому, глядя на это сказать и какие проблемы им сSQL запросов с группой по статье, с суммой aggreagte

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 
+1

Я смотрю на это, и проблема, которую я вижу, заключается в том, что вы не дали мне понять, что проблема – DaveRlz

+1

где сумма() совокупность? Там должно быть что-то вроде (sum (somecloumn) – nakosspy

ответ

2

Так как же вы хотите, чтобы вычислить другие столбцы, группируются только customerid, но вы хотите показать также paymentdata.paidamount, paymentdata.balanceamount и paymentreceipt.paidamount?

Учтите, что группа возвращает несколько строк для каждой группы, поэтому sql-сервер (или любые другие rdbms, кроме MySql) не знает, какую строку вы хотите показать для негруппированных столбцов. Если вы не хотите выбирать одну строку, вам нужно заполнить столбец. Так, например, с помощью SUM, COUNT, MAX или AVG:

Например:

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 
+0

Я хочу использовать эту «сумму (paymentreceipt.paidamount) AS Expr1» только –

+0

@MirzaAsghirBaig: Отредактировал мой ответ, чтобы использовать 'SUM (paymentreceipt.paidamount) AS ReceiptPaidSum'. Но что вы хотите сделать с двумя другими негрупповыми столбцами? –

+0

Я хочу иметь что-то вроде этого –

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 
2

Вы не хватает нескольких терминов в вашей группе. Все столбцы, кроме агрегированных, должны быть включены.

1

Вы должны использовать агрегатную функцию для столбцов, не используемых в группе по п

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 
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 

Это, вероятно, все равно не будет дайте правильные номера, потому что вы получаете кросс-соединение по платежам и квитанциям. Если вам нужен лучший ответ, тогда вы должны предоставить образцы данных и ожидаемые результаты в вопросе.

Смежные вопросы