MySQL MAX de SOMME
Cela me fait flipper!
A obtenu les données suivantes:
+----+-----+-------+------------+
| ID | REG | VALUE | DATE |
+----+-----+-------+------------+
| 1 | 1A | 100 | 2009-01-01 |
| 1 | 1A | 100 | 2009-02-01 |
| 1 | 1A | 100 | 2009-03-01 |
| 2 | 1B | 100 | 2009-01-01 |
| 2 | 1B | 100 | 2009-02-01 |
| 2 | 1B | 100 | 2009-03-01 |
| 2 | 1C | 100 | 2009-01-01 |
| 2 | 1C | 100 | 2009-02-01 |
| 2 | 1C | 200 | 2009-03-01 |
+----+-----+-------+------------+
PS {modifier 0001} :: il y a un champ supplémentaire, qui doit également être utilisés pour filtrer les données, l'appeler {TYPE}, pourrait obtenir "UNIQUE" ou "MULTIPLES" comme valeur.
Je veux obtenir le MAX entre SOMME(de chaque {REG}) pour chaque {ID}. Évidemment, c'est une simple représentation, le tableau obtenu, jusqu'à 64985928 registres et {DATE} est le filtrage des données.
Qui sera, la 1re étape d'obtenir la SOMME pour chaque {REG}:
+----+------+
| ID | SUM |
+----+------+
| 1 | 300 |
| 2 | 300 |
| 2 | 400 |
+----+------+
C'est:
SELECT
SUM(value)
FROM
table
WHERE
(date BETWEEN '2009-01-01' AND '2009-03-01')
GROUP BY
reg;
Et puis, tirer le maximum de chaque SOMME, qui est l'endroit où je suis coincé:
+----+------+
| ID | MAX |
+----+------+
| 1 | 300 |
| 2 | 400 |
+----+------+
J'ai essayé:
SELECT
a.id,
MAX(b.sum)
FROM
table a,
(SELECT
SUM(b.value)
FROM
table b
WHERE
(b.date BETWEEN '2009-01-01' AND '2009-03-01') AND (a.id = b.id)
GROUP BY
b.reg);
Une idée?
PS: Désolé pour les fautes.
PS {modifier 0002} Va exemplaire original des requêtes et des données, qu'il aide à mieux.
$QUERY:
SELECT
clienteid AS "CLIENTE",
SUM(saldo) AS "SUMA"
FROM
etl.creditos
WHERE
(titularidad_tipo LIKE 'TITULAR')
AND
(mes_datos BETWEEN '2008-11-01' AND '2009-10-01')
GROUP BY
nuc
ORDER BY
clienteid;
Obtenu:
+---------+-------------+
| CLIENTE | SUMA |
+---------+-------------+
| 64 | 1380690.74 |
| 187 | 1828468.71 |
| 187 | 2828102.80 |
| 325 | 26037422.21 |
| 389 | 875519.05 |
| 495 | 20084.93 |
| 495 | 109850.46 |
+---------+-------------+
Alors, ce que je cherche est:
+---------+-------------+
| CLIENTE | MAX |
+---------+-------------+
| 64 | 1380690.74 |
| 187 | 1828468.71 |
| 325 | 26037422.21 |
| 389 | 875519.05 |
| 495 | 109850.46 |
+---------+-------------+
Mais en cours d'exécution:
SELECT
clienteid AS "CLIENTE",
MAX(suma)
FROM
(SELECT clienteid, SUM(saldo) AS "suma" FROM etl.creditos
WHERE (mes_datos BETWEEN '2009-08-01' AND '2009-10-01') AND (titularidad_tipo LIKE 'TITULAR')
GROUP BY clienteid, nuc) AS sums
GROUP BY
clienteid
ORDER BY
clienteid;
Résultats:
+---------+-------------+
| CLIENTE | SUMA |
+---------+-------------+
| 64 | 336879.21 |
| 187 | 1232824.51 |
| 325 | 3816173.62 |
| 389 | 218423.83 |
| 495 | 34105.99 |
+---------+-------------+
having
??envisager de fournir une sqlfiddle
OriginalL'auteur Wolfchamane | 2013-08-26
Vous devez vous connecter pour publier un commentaire.
Pouvez-vous raconter ce calcul est faux, donner des exemples de données.
Exemples @ post original
Il semble que vous avez même nuc partagé entre plusieurs clientid. Essayez de faire un select sans l'agrégation sur la base de décider ce que vous voulez dans le résultat. J'ai agrégés sur la base des deux colonnes, si vous voulez agréger sur une seule colonne, modifier en conséquence. Mais je préfère l'agrégation basée sur les deux colonnes qui va donner de bon résultat.
Pouvez-vous me donner un exemple?
OriginalL'auteur DB_learner
Vous pouvez ajouter [ order by SUM(valeur) DESC limit 1 ] pour obtenir le maximum de valeur des résultats de la requête.
OriginalL'auteur Ahmad Alhusainy