2009-08-12 9 views
28

Mam kwerendy SQL, wygląda mniej więcej tak:Korzystanie Unia i count (*) razem w zapytaniu SQL

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

a inny, identyczny który ładuje z tabeli wyników archiwalnych, ale pola są takie same .

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

Jak połączyć oba w jednym zapytaniu? (A więc grupa by nadal działała poprawnie). Próbowałem ze związkiem wszystko, ale to nie zadziała. czego mi brakuje?

Odpowiedz

53
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

Dziękuję. Jedyne, czego mi brakowało, to część "as tem" ... Zapomniałem, że muszę nazwać "tabelę", którą tworzę, żeby to zadziałało. –

+5

To da złą odpowiedź. W rzeczywistości da to 1 na każde nazwisko, ponieważ UNION jest domyślnie UNION DISTINCT. Użyj UNION ALL. –

+0

Dziękuję Steve Kass, jednak już wiedziałem, że muszę używać UNION ALL. Jak stwierdzono powyżej, wszystko, czego mi brakowało, było terminem "as". –

6

Czy twoim celem ...

  1. Aby policzyć wszystkie wystąpienia "Bob Jones" w obu tabelach (na przykład)
  2. Aby policzyć wszystkie wystąpienia "Bob Jones" w Results w jednym wierszu i wszystkie wystąpienia "Bob Jones" w Archive_Results w osobnym wierszu?

Zakładając, że to nr 1, że chcesz coś jak ...

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

Jeśli wspieranie indeksów i stosunkowo wysokie liczy, coś w tym może być znacznie szybciej niż rozwiązania zasugerowano:

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; 
+0

FYI, że uderzyłem "Oba" jako zarezerwowane słowo. MySQL 5.1 (btw) – Douglas

+0

Myślę, że zamiast utrzymywania dwóch kolumn, SUM (Count) również by działało. – Rana

Powiązane problemy