sql >> Database teknologi >  >> RDS >> Mysql

Hvordan kan jeg stille to betingelser i at have klausul

Som dokumenteret under SELECT Syntaks:

Med andre ord anvendes den efter grupperingsoperationen er blevet udført (i modsætning til WHERE , som udføres før enhver grupperingsoperation). Se WHERE vs HAVING .

Derfor danner din aktuelle forespørgsel først resultatsættet fra følgende:

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

Se den på sqlfiddle :

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

Som du kan se, er de valgte værdier for file kolonne er blot én af værdierne fra hver gruppe – som dokumenteret under MySQL Udvidelser til GROUP BY :

Din nuværende forespørgsel fortsætter derefter med at filtrere disse resultater i henhold til din HAVING klausul:

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

Med værdierne for file valgt ovenfor, hver enkelt gruppe matcher på det andet kriterium; og de to første grupper matcher det første kriterium. Derfor resultaterne af den komplette forespørgsel er:

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

Følger dine kommentarer ovenfor , vil du filtrere posterne på file før gruppering og filtrer derefter de resulterende grupper for dem, der indeholder mere end ét match. Brug derfor WHERE og HAVING (og vælg Number i stedet for file for at identificere hver gruppe):

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

Se den på sqlfiddle :

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


  1. MySQL:Embedded JSON vs table

  2. Now() vs GetDate()

  3. mySql kopierer rækker til samme tabel med ændret nøgleværdi (overskriver ikke eksisterende)

  4. PostgreSQL belastningsbalancering i skyen gjort let