Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como posso fazer duas condições em ter cláusula


Conforme documentado em SELECT Sintaxe:

Em outras palavras, é aplicado depois a operação de agrupamento foi realizada (em contraste com WHERE , que é executado antes qualquer operação de agrupamento). Consulte ONDE vs TER .

Portanto, sua consulta atual primeiro forma o conjunto de resultados a partir do seguinte:
SELECT   COUNT(domain) AS `sum domains`, file
FROM     `table`
GROUP BY Number

Veja em sqlfiddle :
| SUM DOMAINS |      FILE |
---------------------------
|           2 | aaa.com_1 |
|           2 | bbb.com_1 |
|           1 | eee.com_1 |

Como você pode ver, os valores selecionados para o file column são apenas um dos valores de cada grupo - conforme documentado em MySQL Extensões para GROUP BY :

Sua consulta atual passa a filtrar esses resultados de acordo com seu HAVING cláusula:
HAVING   COUNT(Number) > 1 AND file LIKE '%\_1'

Com os valores de file selecionado acima, cada grupo corresponde ao segundo critério; e os dois primeiros grupos coincidem no primeiro critério. Portanto, os resultados da da consulta completa estão:
| SUM DOMAINS |      FILE |
---------------------------
|           2 | aaa.com_1 |
|           2 | bbb.com_1 |

Seguindo seus comentários acima , você deseja filtrar os registros em file antes agrupamento e, em seguida, filtre os grupos resultantes para aqueles que contêm mais de uma correspondência. Portanto, use WHERE e HAVING respectivamente (e selecione Number em vez de file para identificar cada grupo):
SELECT   Number, COUNT(*) AS `sum domains`
FROM     `table`
WHERE    file LIKE '%\_1'
GROUP BY Number
HAVING   `sum domains` > 1

Veja em sqlfiddle :
| NUMBER | SUM DOMAINS |
------------------------
|    222 |           2 |