0

私はこれらの3つのテーブルを持っています

CREATE TABLE "Countries"
(
  name text NOT NULL,
  pop integer,
  CONSTRAINT country PRIMARY KEY (name),
  CONSTRAINT pop_check CHECK (pop > 0)
)

CREATE TABLE "Cities"
( name text NOT NULL, pop integer,
  country_name text,
  CONSTRAINT "City_ref" PRIMARY KEY (name),
  CONSTRAINT country_ref FOREIGN KEY (country_name)
      REFERENCES "db1001002_Countries" (name) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT "Population" CHECK (pop > 0)
);

CREATE TABLE " Company"
(
  "City_name" text NOT NULL,
  "Company_Name" text NOT NULL,
  no_of_employee integer,
  CONSTRAINT "City_company" PRIMARY KEY ("City_name", "Company_Name"),
  CONSTRAINT city_ref FOREIGN KEY ("City_name")
      REFERENCES "Cities" (name) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT employee_check CHECK (no_of_employee > 0)
)

私の問題は、ネストされたクエリを次の形式で使用したいということです

select field(s) from table(s)
where field(s) in (select field(s) from table(s) condition)
group by field(s) 

フィールドを持つ新しいテーブルを取得する

country, min_pop, max_pop, average_pop 
for cities with pop > 500000

クエリを書いてみましたが、サブクエリのフィールドが多すぎるというエラーが発生し続けます。postgresql 9.3 を使用しています。

このクエリを使用すると、何らかの結果が得られます。

SELECT country_name, min_pop, max_pop, avg_popo
  FROM (SELECT country_name, min(pop),max(pop),avg(pop)
  FROM
  "Cities"
  GROUP BY country_name)
  AS popcal(country_name,min_pop, max_pop, avg_popo)
  WHERE min_pop>500000

この形式でクエリを記述する方法はありませんか

select field(s) from table(s)
where field(s) in (select field(s) from table(s) condition)
group by field(s) 

?

4

2 に答える 2

0

元の質問を編集してください。あなたのコメントを考えると、あなたはまったく別の質問をしていました... AndreaBocの答えは正しいです。

于 2013-10-25T12:48:59.087 に答える