Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann ich zwei Bedingungen in einer Klausel haben?

Wie unter SELECT dokumentiert Syntax:

Mit anderen Worten, es wird nach angewendet die Gruppierungsoperation durchgeführt wurde (im Gegensatz zu WHERE , die vorher ausgeführt wird jeder Gruppierungsvorgang). Siehe WHERE vs HAVING .

Daher bildet Ihre aktuelle Abfrage zunächst die Ergebnismenge aus:

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

Sehen Sie es auf sqlfiddle :

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

Wie Sie sehen können, sind die für die file ausgewählten Werte Spalte sind lediglich einer der Werte aus jeder Gruppe – wie unter MySQL dokumentiert Erweiterungen zu GROUP BY :

Ihre aktuelle Abfrage fährt dann fort, diese Ergebnisse nach Ihrem HAVING zu filtern Klausel:

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

Mit den Werten von file oben ausgewählt, stimmt jede einzelne Gruppe mit dem zweiten Kriterium überein; und die ersten beiden Gruppen stimmen beim ersten Kriterium überein. Daher die Ergebnisse von der vollständigen Abfrage sind:

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

Folgen Sie Ihren obigen Kommentaren , möchten Sie die Datensätze nach file filtern vorher gruppieren und dann die resultierenden Gruppen nach denen filtern, die mehr als eine Übereinstimmung enthalten. Verwenden Sie daher WHERE und HAVING (und wählen Sie Number statt file um jede Gruppe zu identifizieren):

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

Sehen Sie es auf sqlfiddle :

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