MySQL sous-Requête à l'aide de SOMME, OÙ, GROUP_BY
Je suis un débutant (pas de données).
La version simple de mes données ==> Mon espéré pour résultat:
|boule |couleur|count| |ball |Total Blue|Total| Rouge ------------------- ---------------------------- |b1 |rouge | 2 | ====> |b1| 5 | 2 | |b1 |bleu | 3 | |b2| 3 | 1 | |b1 |bleu | 2 | |b2 |rouge | 1 | |b2 |bleu | 3 |
Je veux de la saisie de chaque boule (b1, b2, etc).
Le nombre total d'occurrence de chaque couleur pour chaque balle.
Il y a plusieurs entrées pour chaque couleur de chaque boule (dans mon monde réel des données).
Mais ici, je montre plusieurs entrées pour le bleu #1-balles seulement.
Je peux facilement le faire:
SELECT ball,
SUM(count) AS 'Total Blue'
FROM t1
WHERE color = 'blue'
GROUP BY ball
Pour obtenir le premier (bon) résultat:
|boule |Total Bleu| ----------------- |b1 | 5 | |b2 | 3 |
Pour aller plus loin, je pense que j'ai besoin d'une sous-requête.
Mais je n'ai pas été en mesure d'obtenir la sous-requête à traiter de la même manière que la requête courante.
Ci-dessous est le plus proche du résultat que j'ai obtenu jusqu'à présent (simple tentative):
SELECT ball,
SUM(count) AS 'Total Blue',
(SELECT SUM(count) FROM t1 WHERE color = 'red') AS 'Total Red'
FROM t1
WHERE color = 'blue'
GROUP BY ball
J'obtiens ceci:
|boule |Total Blue| Total| Rouge --------------------------- |b1| 5 | 3 | |b2| 3 | 3 |
Total Rouge indique le total de toutes les boules rouges, indépendamment de la boule numéro.
Ce plus impliqués sous-requête (pour le rouge) produit exactement le même résultat:
(SELECT SUM(cc) FROM
(SELECT DISTINCT count AS cc FROM t1 WHERE color = 'red') AS dd )
AS 'Total Red'
J'ai ajouté du GROUPE PAR cette sous-requête pour pas plus d'effet.
C'est aussi proche que j'ai pu obtenir.
De nombreux autres essais ont donné une variété de résultats.
OriginalL'auteur Paul Quesada | 2012-08-29
Vous devez vous connecter pour publier un commentaire.
Essayez de combiner SOMME et SI:
OriginalL'auteur Mark Byers
Je veux juste offrir, parce que le CAS est le standard SQL et SI n'est pas:
Aussi, d'avoir "compter" comme le nom d'une colonne est une mauvaise idée, parce que c'est un mot réservé SQL.
COUNT
n'est pas une mot réservé dans MySQL, mais c'est le nom d'un fonction d'agrégation.Vous avez raison qu'il n'est pas dans la liste de MySQL mots réservés. Le COMTE est, cependant, sur chaque liste de mots réservés SQL que j'ai pu trouver (je n'ai pas de norme sur la main pour vérifier). Je pense toujours que c'est une mauvaise idée d'utiliser ces mots pour les noms de variables.
OriginalL'auteur Gordon Linoff