• ベストアンサー

クエリー

お世話になっております。 あるクエリーが解決できなくて困っています。 データベース名:world テーブル名:country, city, countryLanguage 条件: 3つ以上の言語を持っている国と、人口が100万人以上 上の条件が当てはまる、language name, country name, country populationを表示させる。 mysql> select country.Name, countrylanguage.Language, country.Population -> from city, country, countrylanguage -> where (countrylanguage.CountryCode = country.Code) and (country.Populatio n > 100000000) -> order by country.Population DESC でやっても条件に合わずに駄目でした。 3つ以上の言語を持っている国という条件をどのように指定したらいいのか分からずに困っています。 ご教授お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

(1)3つ以上の言語を持っている国という条件 group byでCountryCodeをグループ化し、3行以上存在するものをhavingで条件指定することで取り出します。 (2)表cityの結合は、この検索では不要です。 (3)人口の条件が、「1億を超えるもの」になってますが? 100万人以上なら、country.Populatio n >= 1000000ですよね? (4)ORDER BYで人口順になってますが、言語の順は不定でいいのでしょうか? サブクエリを使用しているので、MySQL 4.1以降で実行する必要がありますが、下記SQLを試してみてください。 select country.Name, countrylanguage.Language, country.Population from country, countrylanguage where countrylanguage.CountryCode = country.Code and country.Code in(select CountryCode from CountryLanguage group by CountryCode having count(*)>=3) and country.Population >= 1000000 order by country.Population DESC

その他の回答 (2)

  • kaeru_007
  • ベストアンサー率22% (8/36)
回答No.2

こんにちわ。 SQL文の having という句をしらべてみてください。 解決できますよ。

  • webuser
  • ベストアンサー率33% (372/1121)
回答No.1

それぞれのテーブルの項目が書かれていないのでなんとも言えませんが、テーブルcityが一切条件に入っていませんね。 それが原因の可能性大です。

bmwm52006
質問者

補足

すみません、テーブルの項目を書くのを忘れていました。下のような項目になっています。 少なくとも3つの言語を話す国を選択するという条件の作り方がわからないんです。 お手数かけますが、よろしくお願い致します。 city +-------------+----------+ | Field | Type | +-------------+----------+ | ID | int(11) | | Name | char(35) | | CountryCode | char(3) | | District | char(20) | | Population | int(11) | +-------------+----------+ country -------------------------- | Field | Type | +----------------+-------- -------------------------+ | Code | char(3) | | Name | char(52 | | Continent | enum('A rctica','South America') | | Region | char(26 | | SurfaceArea | float(1 | | IndepYear | smallin | | Population | int(11) | | LifeExpectancy | float(3 | | GNP | float(1 | | GNPOld | float(1 | | LocalName | char(45 | | GovernmentForm | char(45 | | HeadOfState | char(60 | | Capital | int(11) | | Code2 | char(2) | CountryLanguage +-------------+--------------- | Field | Type +-------------+--------------- | CountryCode | char(3) | Language | char(30) | IsOfficial | enum('T','F') | Percentage | float(4,1) +-------------+---------------

関連するQ&A