sql >> Databáze >  >> RDS >> Mysql

Jak mohu vytvořit dvě podmínky v klauzuli

Jak je zdokumentováno v části SELECT Syntaxe:

Jinými slovy, použije se po operace seskupení byla provedena (na rozdíl od WHERE , která se provádí před jakákoli operace seskupování). Viz KDE vs HAVING .

Proto váš aktuální dotaz nejprve vytvoří sadu výsledků z následujícího:

SELECT   COUNT(domain) AS `sum domains`, file
FROM     `table`
GROUP BY Number

Podívejte se na to na sqlfiddle :

| SUM DOMAINS |      FILE |
---------------------------
|           2 | aaa.com_1 |
|           2 | bbb.com_1 |
|           1 | eee.com_1 |

Jak můžete vidět, hodnoty vybrané pro file jsou pouze jednou z hodnot z každé skupiny – jak je zdokumentováno v MySQL Rozšíření do GROUP BY :

Váš aktuální dotaz pak pokračuje ve filtrování těchto výsledků podle vašeho HAVING klauzule:

HAVING   COUNT(Number) > 1 AND file LIKE '%\_1'

S hodnotami file výše vybraná, každá jednotlivá skupina odpovídá druhému kritériu; a první dvě skupiny se shodují podle prvního kritéria. Proto výsledky úplného dotazu jsou:

| SUM DOMAINS |      FILE |
---------------------------
|           2 | aaa.com_1 |
|           2 | bbb.com_1 |

Sledujete vaše komentáře výše , chcete filtrovat záznamy podle file před seskupení a poté filtrovat výsledné skupiny pro ty, které obsahují více než jednu shodu. Použijte proto WHERE a HAVING (a vyberte Number místo file k identifikaci každé skupiny):

SELECT   Number, COUNT(*) AS `sum domains`
FROM     `table`
WHERE    file LIKE '%\_1'
GROUP BY Number
HAVING   `sum domains` > 1

Podívejte se na sqlfiddle :

| NUMBER | SUM DOMAINS |
------------------------
|    222 |           2 |


  1. Jak vytvořit dokument Excel z programu Java pomocí Apache POI

  2. Kontejner Spring Docker nemá přístup ke kontejneru Postgres Docker

  3. Zamykání a výkon

  4. Návrh databáze:jeden velký stůl nebo samostatné tabulky?