2016-01-14 1 views
0

У меня есть моя первая таблица, в которой содержится информация о покупке клиентов. Таким образом, если клиент покупать два объекта (ТВ и телефон), 2 строки добавляются в следующем:сумма функции неправильные значения и список еще не оплаченных в этом месяце

Row 1:

ID = 12321, имя_клиента = 'X', total_debts = 560, sale_type = 'TV LG 40'» 'дата = ..., время = ...

Row 2:

ID = 34564, имя_клиента =' X », Total_debts = 700, sale_type = 'iPhone', дата = ..., время = ...

Те вошли в эту таблицу называют client_debts

Теперь у меня есть, вторая таблица где он контролирует оплату каждого клиента. Так что, когда г-н X, пришел и платит от его общей суммы $ 1260, всего 200 $ в этом месяце, он будет добавлен к client_details как следующее:

ID = 8642234, client_id = 34564, имя_клиента = ' X ', payment = 200, date_now = ..., time_now = ...

Мне все равно, какой элемент он оплачивает, поэтому я добавил к client_id, последний идентификатор покупки.

Что я хочу сделать, это сравнение между общей задолженностью каждого клиента и его суммарными платежами.Таким образом, я пытался каждый запрос в одиночку:

SELECT client_name, sum(total_debts) FROM alamir_store.client_debts GROUP BY client_name; 

И я получил этот результат:

enter image description here

Второй запрос был:

SELECT client_name, sum(payment) FROM client_details GROUP BY client_name; 

И результат:

enter image description here

То, что я действительно хочу, чтобы объединить эти 2 таблицы вместе, так что я могу видеть, как много нам еще нужно от каждый клиент, и мы хотим, чтобы увидеть, если он платит в этом месяце на любом из его объекта или не к поставить его на нашем нЕ ЗАПЛАЧЕННОЙ СПИСОК

Я попробовал этот запрос, но не поймите меня логический результат:

SELECT t1.client_name, sum(total_debts), sum(payment) FROM 
client_debts t1 INNER JOIN client_details t2 GROUP BY t1.client_name; 

результат является:

enter image description here

любая помощь, чтобы исправить эту ошибку и как сделать не выплатили до сих пор в этом месяце LIST

+0

Почему вы присоединиться, если все, что вам нужно в одной таблице? – genespos

+0

Я пытаюсь, я новичок в MySQL. И это две таблицы, с которыми я работаю здесь. –

ответ

0

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

select td1.client_name,td1.TotalDebt,td2.TotalPayment from (SELECT client_name, sum(total_debts) as TotalDebt FROM client_debts GROUP BY client_name) as td1 
inner JOIN 
(SELECT client_name, sum(payment) as TotalPayment FROM client_details GROUP BY client_name) as td2 
on td1.client_name=td2.client_name 
+0

это работает, спасибо –

+0

вы можете объяснить мне этот вопрос? –

+1

то, что делает запрос, состоит в том, чтобы найти сумму отдельно от каждой таблицы, а затем выполнить объединение этих таблиц. где вы видите, что «как td1» делает запрос в качестве новой таблицы с именем td1, а другой как td2, вы можете присоединиться к этим новым таблицам на основе своих столбцов, используя имя клиента в качестве условия соединения. –

0

Вы забыли проверить условие соответствия того же клиента в обеих таблицах. Используйте приведенный ниже запрос

SELECT t1.client_name, sum(total_debts), sum(payment) FROM 
client_debts t1 INNER JOIN client_details t2 
ON t1.ID=t2.client_id GROUP BY t1.client_name; 
+0

nope, он дает мне сумму (total_debts) двойную от каждого значения, поэтому, если у кого-то было 1660 $ в виде общего количества, это показывает мне, как 3320 $ –

+0

пользователей, которые имеют только один элемент, отображают их значение правильно, но когда пользователь имеет несколько купленных товаров, он удваивает общую задолженность, поэтому мы все еще с той же ошибкой –

+0

Этот запрос отлично подходит для таблицы Normalized. Если вы хотите уточнить запрос, создайте скрипт sql. – Thanga

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