Wie kann man in MySQL mehrere Spalten mit mehreren HAVING-Werten nach GROUP BY gruppieren?
P粉775723722
P粉775723722 2024-02-26 12:04:45
0
1
403

Ich versuche, eine MySQL-Abfrage zu erstellen, um die Tabelle anzuzeigen, in der Suchanfragen gespeichert sind. Diese Abfrage versucht, alle Zeilen abzurufen, die den folgenden Kriterien entsprechen:

  • >=zu einem Date
  • Nur Zeilen zurückgeben, in denen die Suchanfrage dreimal oder öfter vorkommt
  • Außerdem werden nur Zeilen zurückgegeben, in denen 2 oder mehr Benutzer die Suchabfrage verwendet haben

Diese Abfrage funktioniert nicht, sollte aber einen Überblick darüber geben, was ich versuche:

SELECT 
  * 
FROM 
  `analytics` 
WHERE 
  `date` >= '2021-01-01' 
GROUP BY 
  `query` 
HAVING 
  COUNT(*) >= 3 
  AND 
GROUP BY 
  `user` 
HAVING 
  COUNT(*) >= 2 
ORDER BY 
  id DESC;

Beispieldaten

2021-01-0125Was ist ein Hund? 32021-01-0147Was ist ein Hund? 72021-01-01Beispiel SQL
SELECT 
  * 
FROM 
  analytics 
WHERE 
  date >= '2021-01-01' 
GROUP BY 
  query 
HAVING 
  COUNT(*) >= 3 
  AND 
GROUP BY 
  user 
HAVING 
  COUNT(*) >= 2 
ORDER BY 
  id DESC;
id Benutzer Abfrage Datum
1 5 Was ist ein Hund?
2021-01-01
6 Was ist ein Hund?
2021-01-01 5
Was sind Brüder?
Mit den in der obigen Abfrage festgelegten Werten sollte für die Abfrage „Was ist ein Hund“ eine einzelne Zeile zurückgegeben werden, alle anderen Spalten sind unwichtig.

Ich weiß, dass Sie GRUPPE NACH-Spalten mit Kommas trennen können, aber ich kann anscheinend nicht herausfinden, wie ich für jede Spalte unterschiedliche Werte festlegen kann.

P粉775723722
P粉775723722

Antworte allen(1)
P粉818317410

您可以在同一个 HAVING 子句中设置这两个条件:

SELECT `query` 
FROM `analytics` 
WHERE `date` >= '2021-01-01' 
GROUP BY `query`
HAVING COUNT(*) >= 3 AND COUNT(DISTINCT `user`) >= 2;
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!