2015-02-19 3 views
1

У меня есть две таблицы, которые соединяют себя name и dateOfInput.INNER JOIN wrong SUM и COUNT

Таблица документов

id 
name 
price 
dateOfDocument 
dateOfInput 

Таблица клиентов

id 
identification 
name 
dateOfInput 

Данные, которые я хочу показать в сетке это что-то вроде этого:

Name | Identification | Total Price | Total Quantity 
John   #1    15.31   2 
Stack   #13    9.90    1 

И в базы данных линии соответствующих таблиц:

Ряды документы:

VALUES('John', 10.31, '2015-01-01', '2015-01-01 15:00') 
VALUES('John', 5.00, '2015-01-02', '2015-01-02 13:00') 
VALUES('Stack', 9.90, '2015-01-01, '2015-01-01 12:00') 

Ряды клиенты:

VALUES('#1', 'John', '2015-01-01 15:00') 
VALUES('#1', 'John', '2015-01-02 13:00') 
VALUES('#13', 'Stack', '2015-01-01 12:00') 

Для достижения сетки я хочу, вот мой выбор:

SELECT doc.name, cust.identification, 
     SUM(doc.price) AS `totalPrice`, 
     COUNT(doc.name) AS `totalQuantity` 
FROM documents AS doc 
INNER JOIN customers AS cust ON cust.name = doc.name 
WHERE doc.dateOfDocument >= '2015-01-01' AND 
     doc.dateOfInput = cust.dateOfInput 
GROUP BY doc.name 

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

Name | Identification | Total Price | Total Quantity 
John   #1    10.31   1 
Stack   #13    9.90    1 
+0

я получил желаемые результаты, ничего не меняя. http://sqlfiddle.com/#!2/6fc9c/1/0 –

ответ

1

Попробуйте добавить cust.identification к GROUP BY п

1

Это дает мне правильный результат (примечание GROUP BY изменения):

SELECT doc.name, cust.identification, 
    SUM(doc.price) AS 'totalPrice', 
    COUNT(doc.name) AS 'totalQuantity' 
FROM mg_tblDocuments AS doc 
INNER JOIN mg_tblCustomers AS cust ON cust.name = doc.name 
WHERE doc.dateOfDocument >= '2015-01-01' AND 
     doc.dateOfInput = cust.dateOfInput 
GROUP BY doc.name, cust.identification -- add me 

EDIT: взбитое к нему :)

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