MySQL: グループ関数の無効な使用 質問する

MySQL: グループ関数の無効な使用 質問する

私は MySQL を使用しています。スキーマは次のとおりです。

サプライヤー(sid: 整数、sname: 文字列、アドレス文字列)

部品(pid: 整数、pname: 文字列、色: 文字列)

カタログ(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 - グループ機能の使用が無効です

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

ベストアンサー1

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

違いは、WHERE句によって MySQL が選択する行がフィルタリングされることです。それからMySQL は行をグループ化し、関数の数値を集計しますCOUNT

HAVINGWHERE、それが起こるだけです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)

おすすめ記事