1. ホーム
  2. sql

[解決済み] ビュークエリがエイリアスの集計関数を使用する場合、SQLクエリDBMSが実際に実行される

2022-02-17 09:22:52

質問

3ステップの宿題をやっているのですが、最後のステップでつまづいています。最後のステップを理解するために、最初の2つのステップの私の解決策を含む全体の問題を投稿します。

問題と最初の2ステップの解決策

TRIP_INVENTORYという名前のビューを作成します。これは、州と各州の旅行回数の合計から構成されます。各州の総旅行回数の列名には UNITS を使用します。行を州ごとにグループ化して並べます。

a. CREATE VIEWコマンドを記述して実行し、TRIP_INVENTORYビューを作成します。

CREATE VIEW TRIP_INVENTORY AS
SELECT STATE, COUNT(TRIP_ID) AS UNITS
FROM TOURS_TRIP
GROUP BY STATE

b. 10回以上のトリップを持つ各状態について、状態と単位を取得するコマンドを書いて実行せよ。

SELECT STATE, UNITS
FROM TRIP_INVENTORY
WHERE UNITS > 10

私がつまずいたステップ

c. DBMSが実際に実行するクエリを書き、実行する。

これが、私が思いついた失敗作のクエリです。

SELECT STATE, COUNT(TRIP_ID) AS UNITS
FROM TOURS_TRIP
WHERE UNITS > 10
GROUP BY STATE

問題は、UNITS列のエイリアスをWHERE句で参照できないことです。WHERE句で集約関数も使えません。サブクエリを使用する必要があることは確かですが、ネストされたクエリの結果を使用して不要な状態を削除するように制約を構成する方法が分かりません。

どなたかお分かりになる方はいらっしゃいますか?

解決方法は?

実装によりますが

b)

SELECT STATE, COUNT(TRIP_ID) AS UNITS
FROM TOURS_TRIP
GROUP BY STATE
having COUNT(TRIP_ID) > 10

c)

Select state, units from (
  SELECT STATE, COUNT(TRIP_ID) AS UNITS
  FROM TOURS_TRIP
  GROUP BY STATE
) temp (state,units) 
where units > 10