Подтвердить что ты не робот

Использование union и count (*) вместе в SQL-запросе

У меня есть SQL-запрос, выглядит примерно так:

select name, count (*) from Results group by name order by name

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

select name, count (*) from Archive_Results group by name order by name

Как я мог бы объединить два в одном запросе? (Таким образом, группа по-прежнему будет работать правильно). Я пробовал с профсоюзом все, но это не сработает. Что мне не хватает?

4b9b3361

Ответ 1

SELECT tem.name, COUNT(*) 
FROM (
  SELECT name FROM results
  UNION ALL
  SELECT name FROM archive_results
) AS tem
GROUP BY name
ORDER BY name

Ответ 2

Если у вас есть поддерживающие индексы и относительно высокие показатели, что-то вроде этого может быть значительно быстрее, чем предложенные решения:

SELECT name, MAX(Rcount) + MAX(Acount) AS TotalCount
FROM (
  SELECT name, COUNT(*) AS Rcount, 0 AS Acount
  FROM Results GROUP BY name
  UNION ALL
  SELECT name, 0, count(*)
  FROM Archive_Results
  GROUP BY name
) AS Both
GROUP BY name
ORDER BY name;

Ответ 3

Ваша цель...

  • Считать все экземпляры "Боба" Jones "в обеих таблицах (например)
  • Считать все экземпляры "Боба" Jones "в Results в одной строке и все экземпляры "Боб Джонса" в Archive_Results в отдельной строке?

Предполагая, что это # ​​1, вам нужно что-то вроде...

SELECT name, COUNT(*) FROM
(SELECT name FROM Results UNION ALL SELECT name FROM Archive_Results)
GROUP BY name
ORDER BY name