0

なぜ 3 つのクエリはそれほど異なるのでしょうか。MySQL のドキュメントによると、それらはすべて同じことを行うべきではありませんか?

select cc, max(c) as "Most Official Billingual Count" from (
  select CountryCode as cc, count(*) as c from countrylanguage where isofficial = "T"
  group by cc
) t group by cc

次の形式で複数の行を返します: CountryCode Official_Language_Count_Blabla

一方、1 つのグループを削除すると...

select cc, max(c) as "Most Official Billingual Count" from (
  select CountryCode as cc, count(*) as c from countrylanguage where isofficial = "T"

) t group by cc

最初の国コードと合計カウントを返します: ABW 238

この:

select cc, max(c) as "Most Official Billingual Count" from (
  select CountryCode as cc, count(*) as c from countrylanguage where isofficial = "T"
  group by cc
) t 

次のようなものが返されます: ABW 4

私はこのグループ全体について非常に混乱しています。

内部クエリ

  select CountryCode as cc, count(*) as c from countrylanguage where isofficial = "T

すべての国コードを返し、繰り返される国コードをカウントする必要がありますか? 右?しかし、それはしません。目的の効果を得るには最初のキューを実行する必要があるようで、非常に混乱します

4

1 に答える 1

1

サブクエリ:

select CountryCode as cc, count(*) as c from countrylanguage where isofficial = "T"

対応する基準でレコードをグループ化しない限り意味がありません。WHERE句は選択基準のみを示しているため、レコードをグループ化する必要があります。理解するために、この明確化ビデオ(DBMS は Oracle ですが、関係ありません) を参照してくださいGROUP BY。また (私は読むのが好きです)、そのための多くの記事を見つけることができます

MAXしたがって、カウント間で検索する必要がある場合は、最初GROUP BYにサブクエリでグループを結合する必要があります。

于 2013-08-29T08:08:46.333 に答える