Сравнение двух таблиц не дает желаемого результата. Как я могу это исправить? - PullRequest
0 голосов
/ 13 апреля 2020

Я хочу сравнить две таблицы. Тем не менее, они не сравниваются в одну и ту же дату.

1.table name: hospital_payment_data

id    chart_num        chart_name          visit            card_amount_received
1        9740             t1             2019-01-02               500                        
2        9740             t1             2019-01-02               500           
3        23143            t2             2019-01-02               2000                        
4        14220            t3             2019-01-02               3000              

2.table name: credit_card

id           card_date             advenced_amount
1           2019-01-02                 1000        
2           2020-01-02                 2000   
3           2020-01-02                 3000 

3.table имя: графики

 id               name
9740               t1     
23143              t2          
14220              t3        

Когда я отправляю запрос, я получаю следующее:

select
  charts.id as chart_num,
  visit,
  charts.name as chart_name,
  sum(card_amount_received) as card_amount_received,
  credit_card.card_date,
  credit_card.amount as amount,
  if(credit_card.amount = sum(card_amount_received), 'ok', 'error') as result
from hospital_payment_data
join charts on charts.id = chart_num
left join credit_card on date(credit_card.card_date) = visit
group by chart_num, visit

неверный результат ошибки:

enter image description here

Я хочу результат

enter image description here

Как исправить мой запрос? Пожалуйста, помогите мне.

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Это обычное умножение JOIN. Подсчитайте суммы в подзапросе, а затем соедините другие таблицы.

Можете ли вы объяснить мне детали? - user1082164

Представьте, что есть таблица

id   val
 1   100
 1   200

Сумма val равна 300. Представьте, что есть еще одна таблица

id   txt
 1   'A'
 1   'B'

, присоединенная к первый на id. При объединении каждой строки из 1-й таблицы будут объединены все соответствующие строки 2-й таблицы:

SELECT id, val, txt FROM t1 JOIN t2 USING (id);

id   val  txt
 1   100  'A'
 1   200  'A'
 1   100  'B'
 1   200  'B'

Теперь сумма val в объединенном агломерате равна 600 - она ​​умножается на присоединение каждого к каждому ,

Чтобы получить правильную сумму, мы должны сначала выполнить суммирование по одной таблице в подзапросе (без объединения с эффектом умножения), а затем присоединить другую таблицу к подзапросу суммирования.

PS. Я не буду редактировать ваш запрос - он не соответствует настройке ONLY_FULL_GROUP_BY.

0 голосов
/ 13 апреля 2020

Ваша структура таблицы недействительна. Ваши данные в таблице credit_card должны быть идентифицируемыми, и вы должны связать платеж с задолженностью. На данный момент есть два решения.

  1. Добавление нового столбца card_id или chart_num_id в таблицу credit_card. Затем вы можете периодически запускать сценарий, присваивая карточке значение card_id, если вы не можете сделать это в момент добавления строк в эту таблицу. Но ... что делать, если будет 2 долга 2000 $, и вы получите только один платеж 2000 $. Тогда невозможно назначить один платеж правильному идентификатору без дополнительной информации об этом платеже.

  2. Проверка ежедневной группировки платежей по датам, а не по картам. Вы можете изменить скрипт SQL, проверяя суммы платежей за каждый день. Теперь вы группируете платежи по chart_num и вместо этого можете группировать по card_date и visit.

  3. Вы все еще можете создать действительный запрос SQL, но очень сложный, и я полностью Не вижу смысла, почему это было бы более желательно, чем идея. Много усилий практически без прибыли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...