web-dev-qa-db-ja.com

SQLクエリでunionとcount(*)を一緒に使用する

SQLクエリがあります。次のようになります。

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

もう1つはアーカイブ結果テーブルからロードされますが、フィールドは同じです。

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

1つのクエリで2つをどのように結合しますか? (したがって、group byは正しく機能します)。私はすべてユニオンで試しましたが、うまくいきません。私は何が欠けていますか?

37
David Božjak
select tem.name, count(*) 
from(select name from results
union all
select name from archive_results) as tem
group by name
order by name
71
krdluzni

サポートするインデックスがあり、比較的高いカウントを持っている場合、このようなものは、提案されたソリューションよりもかなり速い可能性があります。

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;
9
Steve Kass

あなたの目標は...

  1. 両方のテーブルの「ボブジョーンズ」のすべてのインスタンスをカウントするには(たとえば)
  2. 1行のResultsの「Bob Jones」のすべてのインスタンスと、別の行のArchive_Resultsの「Bob Jones」のすべてのインスタンスをカウントするには?

それが#1だと仮定すると、次のようなものが欲しいでしょう...

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