Comment GROUPER PAR plusieurs colonnes avec plusieurs valeurs HAVING dans MySQL ?
P粉775723722
P粉775723722 2024-02-26 12:04:45
0
1
447

J'essaie de créer une requête MySQL pour afficher la table où les requêtes de recherche sont stockées. Cette requête tente d'obtenir toutes les lignes correspondant aux critères suivants :

  • >= à un rendez-vous
  • Renvoyer uniquement les lignes où la requête de recherche apparaît 3 fois ou plus
  • Renvoie également uniquement les lignes dans lesquelles 2 utilisateurs ou plus ont utilisé la requête de recherche

Cette requête ne fonctionne pas mais devrait donner un aperçu de ce que j'essaie de faire :

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;

Exemple de données

id Utilisateur Requête Date
1 5 Qu'est-ce qu'un chien 2021-01-01
2 5 Qu'est-ce qu'un chien 2021-01-01
3 6 Qu'est-ce qu'un chien 2021-01-01
4 7 Qu'est-ce qu'un chien 2021-01-01
5 7 Que sont les frères 2021-01-01

Exemple 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;

En utilisant les valeurs définies dans la requête ci-dessus, une seule ligne doit être renvoyée pour la requête "Qu'est-ce qu'un chien", toutes les autres colonnes sont sans importance.

Je sais que vous pouvez GROUPER PAR des colonnes séparées avec des virgules, mais je n'arrive pas à comprendre comment définir des valeurs différentes pour chaque colonne.

P粉775723722
P粉775723722

répondre à tous(1)
P粉818317410

Vous pouvez définir les deux conditions dans la même clause HAVING :

SELECT `query` 
FROM `analytics` 
WHERE `date` >= '2021-01-01' 
GROUP BY `query`
HAVING COUNT(*) >= 3 AND COUNT(DISTINCT `user`) >= 2;
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal