MySQL UNION создает странный результат - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь объединить данные двух таблиц, чтобы получить общее число потенциальных клиентов по штатам.Однако по какой-то причине он берет все лиды из таблицы _1 и помещает их в TX (Техас).Оба запроса работают правильно, когда они разделены, но не в сочетании с объединением.

TX  197 (This is the combined total of all leads in table_1)
CA  102 (This is the total for table_2. Does not include table_1)
TX  48  (This is the total for table_2. Does not include table_1)
FL  37  (This is the total for table_2. Does not include table_1)
MO  35  ...
NY  25  ...
etc. etc.

Вот мой запрос ...

SELECT state, count(*) AS cnt FROM `table_1` WHERE submission_date > CURDATE() - INTERVAL 2 YEAR AND unk IS NULL 
UNION ALL
SELECT state, count(*) AS cnt FROM `table_2` WHERE submission_date > CURDATE() - INTERVAL 2 YEAR AND unk IS NULL 
GROUP BY state
ORDER BY cnt DESC

Ответы [ 2 ]

1 голос
/ 20 марта 2019

Я думаю, вам нужны скобки, поэтому группа by выполняется после объединения и убирает отсчет

    select state, count(*) AS cnt FROM 
        (SELECT state FROM `table_1` WHERE submission_date > CURDATE() - INTERVAL 2 YEAR AND unk IS NULL 
        UNION ALL
        SELECT state  FROM `table_2` WHERE submission_date > CURDATE() - INTERVAL 2 YEAR AND unk IS NULL
        ) T
        GROUP BY state
        ORDER BY cnt DESC
0 голосов
/ 20 марта 2019

GROUP BY относится только к подзапросу second . Это не то, что вы намереваетесь.

В большинстве баз данных ваш запрос приведет к ошибке. Я думаю, что вы хотите:

SELECT state, SUM(cnt) as cnt
FROM ((SELECT state, count(*) AS cnt
       FROM `table_1`
       WHERE submission_date > CURDATE() - INTERVAL 2 YEAR AND unk IS NULL
      ) UNION ALL
      (SELECT state, count(*) AS cnt
       FROM `table_2`
       WHERE submission_date > CURDATE() - INTERVAL 2 YEAR AND unk IS NULL 
       GROUP BY state
      )
     ) s
GROUP BY state
ORDER BY SUM(cnt) DESC;

Выполнение GROUP BY в каждом подзапросе необязательно. Однако производительность GROUP BY растет быстрее, чем линейно. Таким образом, два меньших GROUP BY s обычно быстрее, чем один больший, даже с внешним агрегированием.

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