sql >> Databasteknik >  >> RDS >> Mysql

Hur kan jag göra två villkor i att ha klausul

Som dokumenterats under SELECT Syntax:

Med andra ord, det tillämpas efter grupperingsoperationen har utförts (i motsats till WHERE , som utförs före någon grupperingsoperation). Se WHERE vs HAVING .

Därför bildar din aktuella fråga först resultatuppsättningen från följande:

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 är de valda värdena för file kolumnen är bara ett av värdena från varje grupp – som dokumenterats under MySQL Tillägg till GROUP BY :

Din nuvarande fråga fortsätter sedan med att filtrera dessa resultat enligt din HAVING klausul:

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

Med värdena för file vald ovan matchar varje enskild grupp på det andra kriteriet; och de två första grupperna matchar det första kriteriet. Därför resultaten av den fullständiga frågan är:

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

Följer dina kommentarer ovan , vill du filtrera posterna på file före gruppera och filtrera sedan de resulterande grupperna för de som innehåller mer än en matchning. Använd därför WHERE och HAVING (och välj Number istället för file för att identifiera varje grupp):

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. Tomt uttalande i T-SQL

  2. Migrering för att ändra standardvärdet för ett fält och ändra alla befintliga posts värde till nytt standardvärde endast om det har ett gammalt standardvärde.

  3. Få fältvärdet med en markör

  4. Konfigurera Spring boot Docker och Mysql