Maison  >  Questions et réponses  >  le corps du texte

Comment GROUPER PAR plusieurs colonnes avec plusieurs valeurs HAVING dans MySQL ?

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 :

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粉775723722P粉775723722236 Il y a quelques jours407

répondre à tous(1)je répondrai

  • P粉818317410

    P粉8183174102024-02-27 00:58:40

    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;

    répondre
    0
  • Annulerrépondre