1. ホーム
  2. mysql

[解決済み] MySQLの グループ関数の無効な使用

2022-02-12 09:22:37

質問

MySQLを使用しています。以下は私のスキーマです。

仕入先( sid: 整数 名前: 文字列, 住所: 文字列)

部品( pid: 整数 , pname: 文字列, color: 文字列)

カタログ( sid: 整数, pid: 整数 コスト: 実数)

(主キーは太字)

少なくとも2つのサプライヤーによって製造されたすべての部品を選択するクエリを作成しようとしています。

-- Find the pids of parts supplied by at least two different suppliers.
SELECT c1.pid                      -- select the pid
FROM Catalog AS c1                 -- from the Catalog table
WHERE c1.pid IN (                  -- where that pid is in the set:
    SELECT c2.pid                  -- of pids
    FROM Catalog AS c2             -- from catalog
    WHERE c2.pid = c1.pid AND COUNT(c2.sid) >= 2 -- where there are at least two corresponding sids
);

まず、このやり方は正しいのだろうか?

次に、このエラーが発生します。

1111 - グループ関数の無効な使用

何が間違っているのでしょうか?

どうすればいいですか?

を使用する必要があります。 HAVING ではなく WHERE .

違いは、以下の通りです。 WHERE 節は、MySQL が選択する行をフィルタリングします。 次に MySQL は行をグループ化し、その数値を集計して COUNT 関数を使用します。

HAVING は、まるで WHERE ただ、それが起こるのは その COUNT の値は計算されているので、期待通りに動作するはずです。サブクエリを次のように書き換えてください。

(                  -- where that pid is in the set:
SELECT c2.pid                  -- of pids
FROM Catalog AS c2             -- from catalog
WHERE c2.pid = c1.pid
HAVING COUNT(c2.sid) >= 2)