SELECT
に記載されているとおり 構文:
つまり、後に適用されます。 グループ化操作が実行されました(WHERE
とは対照的) 、前に実行されます グループ化操作)。 WHERE vsHAVING
をご覧ください 。
したがって、現在のクエリは最初に次の結果セットを形成します。
SELECT COUNT(domain) AS `sum domains`, file
FROM `table`
GROUP BY Number
sqlfiddle でご覧ください :
| SUM DOMAINS | FILE | --------------------------- | 2 | aaa.com_1 | | 2 | bbb.com_1 | | 1 | eee.com_1 |
ご覧のとおり、file
に選択された値 列は、各グループの値の1つにすぎません。これは、MySQLに記載されています。 GROUP BY
の拡張機能
:
次に、現在のクエリは、HAVING
に従ってこれらの結果をフィルタリングします。 条項:
HAVING COUNT(Number) > 1 AND file LIKE '%\_1'
file
の値を使用 上で選択した場合、すべてのグループが2番目の基準に一致します。最初の2つのグループは最初の基準で一致します。したがって、完全なクエリ
の結果 は:
| SUM DOMAINS | FILE | --------------------------- | 2 | aaa.com_1 | | 2 | bbb.com_1 |
上記のコメントに続いて 、file
のレコードをフィルタリングします 前 グループ化してから、結果のグループをフィルタリングして、複数の一致を含むグループを探します。したがって、WHERE
を使用してください およびHAVING
それぞれ(そしてNumber
を選択します file
の代わりに 各グループを識別するため):
SELECT Number, COUNT(*) AS `sum domains`
FROM `table`
WHERE file LIKE '%\_1'
GROUP BY Number
HAVING `sum domains` > 1
sqlfiddle でご覧ください :
| NUMBER | SUM DOMAINS | ------------------------ | 222 | 2 |