Добавить итоговую сумму из отдельных таблиц - PullRequest
1 голос
/ 05 ноября 2019

У меня есть 2 таблицы, в которых есть обе ссылки на страны. Это через поле страны в таблице1 и / или таблице 2.

Я могу посчитать сумму с помощью следующего оператора

SELECT co.*,  
    (SELECT COUNT(*) FROM table1 m WHERE m.country=co.id) AS mCount, 
    (SELECT COUNT(*) FROM table2 e WHERE e.country=co.id) AS eCount FROM countries co

Результат примерно такой:

| id | name      | mCount | eCount |

Но я хочу добавить значение в mCount к значению eCount. Я ожидал простой знак плюс, например:

SELECT co.*, mCount+eCount AS grandTotal

, но это не работает. Как добавить эти столбцы в запрос?

1 Ответ

4 голосов
/ 05 ноября 2019

1- Вы можете использовать свой запрос как производную таблицу.

SELECT dt.*, (dt.mCount + dt.eCount) AS grandTotal FROM 
(SELECT co.*,  
    (SELECT COUNT(*) FROM table1 m WHERE m.country=co.id) AS mCount, 
    (SELECT COUNT(*) FROM table2 e WHERE e.country=co.id) AS eCount FROM countries co
) AS dt;

2- Вы можете дополнительно выбрать вычисляемый столбец

SELECT co.*,  
   (SELECT COUNT(*) FROM table1 m WHERE m.country=co.id) AS mCount, 
   (SELECT COUNT(*) FROM table2 e WHERE e.country=co.id) AS eCount,
   (SELECT mCount + eCount) AS grandTotal
 FROM countries co

3- Вы также можете определить переменную пользователя( обескуражен )

SELECT co.*,  
    @mCount := (SELECT COUNT(*) FROM table1 m WHERE m.country=co.id) AS mCount, 
    @eCount := (SELECT COUNT(*) FROM table2 e WHERE e.country=co.id) AS eCount,
    (@mCount + @eCount) AS grandTotal
 FROM countries co

Надеюсь, вам больше всего понравится # 2:)

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