2017-10-14 3 views
1

J'ai une table entries avec les colonnes suivantes: id, email, sku, paiement, created_atMysql: 2 requêtes différentes sur une même table avec le nombre et le groupe par

Je dois écrire quelques requêtes pour obtenir des analyses sur les entrées. Les deux questions que je voudrais combiner en une seule sont:

SELECT sku, compte (email) AS total_current des entrées où le paiement IS NOT NULL ET created_at> = DATE_SUB (NOW(), INTERVALLE 1 semaine) GROUPE PAR ORDRE PAR sku sku ASC

et

SELECT sku, compter (e-mail) AS total_previous des entrées où le paiement IS NOT NULL eT created_at < DATE_SUB (NOW(), INTERVALLE 1 SEMAINE) ET created_at> = DATE_SUB (NOW(), INTERVALLE 2 SEMAINE) GROUPE PAR ORDRE sku PAR sku ASC

L'objectif ici est d'avoir 1 ensemble de résultats avec 3 colonnes qui indiquent le nombre de enregistrements pour chaque sku pour une plage de dates dans la 2ème colonne, et le nombre d'enregistrements pour le même sku dans la 3ème colonne.

  1. sku (où tout est regroupé)
  2. total_current (compte nombre de dossiers qui relèvent de la première plage de dates de requête pour chaque sku séparée)
  3. total_previous (compte nombre de dossiers qui relèvent du champ de la deuxième requête plage de dates pour chaque sku séparé)

Et les résultats doivent être triés par sku croissant.

J'ai essayé beaucoup de choses différentes en utilisant UNION, et JOIN, etc., mais sans aucune chance jusqu'à présent. Toute aide serait grandement appréciée!

Répondre

1

Vous pouvez utiliser l'agrégation conditionnelle pour combiner les deux requêtes:

SELECT sku, 
     count(CASE 
       WHEN created_at >= DATE_SUB(NOW(), INTERVAL 1 WEEK) THEN email 
      END) AS total_current, 
     count(CASE 
       WHEN created_at < DATE_SUB(NOW(), INTERVAL 1 WEEK) AND 
        created_at >= DATE_SUB(NOW(), INTERVAL 2 WEEK) THEN email 
      END) AS total_previous 
FROM entries 
WHERE payment IS NOT NULL AND 
     created_at >= DATE_SUB(NOW(), INTERVAL 2 WEEK) 
GROUP BY sku 
ORDER BY sku ASC 
+0

Intéressant - Je ne vois pas une solution comme ça dans toute ma recherche, mais cela est logique, et il semble travailler nécessaire jusqu'à présent. Je vais le marquer comme la réponse pour l'instant. Merci pour la réponse rapide! – Prattski

+0

@Prattski Continuez alors. – Strawberry