Как получить данные из двух таблиц? - PullRequest
0 голосов
/ 30 марта 2020

Я был в таблице "hospital_payment_data". Я хочу вызвать данные о количестве данных, сумме cache_account_received и сумме total_medical_bills, а затем довести значение суммы монтирования из cash_recipit_rowtable до express. Что мне делать?

  1. hospital_payment_data

    enter image description here

  2. cash_receipt_row

    enter image description here

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

enter image description here

Однако отправка следующие запросы приводят к следующему:

SELECT 
  COUNT(*) as total,  
  SUM(cash_amount_received) AS sum_cash_amount_received, 
  COUNT(
    IF(total_medical_bills >= 100000 AND
    cash_amount_received , total_medical_bills, NULL)
  ) as obligatory_issue, 
  SUM(
    IF(total_medical_bills >= 100000 AND
    cash_amount_received , cash_amount_received, NULL)
  ) as sum_obligatory_issue, 
  SUM(amount) AS sum_amount 
FROM (
  SELECT total_medical_bills, cash_amount_received, amount 
  FROM hospital_payment_data, cash_receipt_row
) AS a

неверный результат

enter image description here

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Попробуйте это.

SELECT 
  COUNT(*) as total,  
  SUM(cash_amount_received) AS sum_cash_amount_received, 
  COUNT(
    IF(total_medical_bills >= 100000 AND
    cash_amount_received , total_medical_bills, NULL)
  ) as obligatory_issue, 
  SUM(
    IF(total_medical_bills >= 100000 AND
    cash_amount_received , cash_amount_received, NULL)
  ) as sum_obligatory_issue, 
  SUM(amount) AS sum_amount 
FROM (
  SELECT total_medical_bills, cash_amount_received, amount 
  FROM hospital_payment_data, cash_receipt_row 
WHERE hospital_payment_data.id = cash_receipt_row.id
) AS a
0 голосов
/ 30 марта 2020

Никогда не используйте запятые в предложении FROM. Всегда используйте правильный, явный, стандартный , читаемый синтаксис JOIN.

Вы также можете упростить свою логику подсчета c в MySQL. Нет необходимости в IF() или подзапросе:

SELECT COUNT(*) as total,  
       SUM(cash_amount_received) AS sum_cash_amount_received, 
       SUM( total_medical_bills >= 100000 AND 
            obligatory_issue <> 0
          ) as obligatory_issue, 
       SUM(CASE WHEN total_medical_bills >= 100000
                THEN cash_amount_received
           END) as sum_obligatory_issue, 
       SUM(amount) AS sum_amount 
FROM hospital_payment_data hpd JOIN
     cash_receipt_row crr
     ON hpd.id = crr.id;

Вы заметите, что там, где требуется условный лог c, тогда используется стандартная конструкция SQL, CASE, а не чем IF.

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