web-dev-qa-db-fra.com

2 groupe avec distinct, somme, comptage: PHP mysql

Ref: https://stackoverflow.com/questions/32066097/Group-by-with-hawing-Distant-php-mysql

J'ai eu la réponse (merci Coiytech) mais j'ai besoin d'une autre colonne dans son:

selon:

id | mid | pid | owgh | nwgh |
1    3      12    1.5    0.6
2    3      12    1.5    0.3
3    3      14    0.6    0.4
4    3      15    1.2    1.1
5    4      16    1.5    1.0
6    4      17    2.4    1.2 
7    3      19    3.0    1.4

j'ai répondu

Sélectionnez Mid, Compter (PID distinct) en tant que CPID, Somme (NWGH) comme totalnwgh du groupe de test par MID

sqlfiddle: http://sqlfiddle.com/#!9/45e68/2

mid  cpid       totalnwgh
3      4          3.8
4      2          2.2 

Mais au-dessus, j'ai besoin d'une autre colonne comme ci-dessous: Totowgh

mid cpid        totalnwgh  totowgh
3      4          3.8        6.3 (DISTINCT value as per pid column)
4      2          2.2        3.9

où ToTowgh = 6.3 viennent par une valeur distincte de la colonne Owgh selon la colonne PID distincte

mID = 3 a compter 5 mais PID distinct = 4 pour la mi-3 de même manière "distincte" owgh = 6.3 pour le milieu = 3 et le PID distinct.

En tant que PID = 12, la valeur de la colonne Owgh 1,5 est deux fois ... par conséquent, c'est compte 1 fois par conséquent,

1,5 + 0,6 + 1.2 + 3 = 6.3 (s'il vous plaît pas si la valeur distincte de PID)

Remarque: j'ai besoin de la valeur de Owgh distincte selon PID distincte ou groupe par PID .. Parce que si je remplace la valeur de Owgh 0.6 avec 1,5, il sera possible de 5,7 au lieu de 7,2 mais la valeur de Owgh 0.6 appartient à pid = 14 et non pid = 12 Ainsi, le nombre total de changements d'Owgh ... mais j'ai besoin de 7.2

Voyez ce que je veux dire: sqlfiddle.com/#!9/2a53c/6 =

1
user3209031

Je crois que vous demandez la somme des valeurs "distinctes" de Owgh pour chaque valeur de Mid and PID - une "granularité" différente des données.

par exemple. Pour Mid = 3, ajoutez 1,5 + 0,6 + 1.2 + 3.0 = 6.3; comptez seulement la 1,5 une fois au lieu de deux fois. Toutefois, si vos identifiants d'enregistrement pour le 1,5 étaient pour 2 valeurs de PID différentes, vous voudrez compter le 1,5 deux fois.

Une façon dont vous pouvez le faire est plutôt que d'interroger directement la table "Test", calculez à l'avance certains des agrégats:

Select mid,
COUNT(distinct pid) as cpid,
SUM(nwgh) as totalnwgh,
SUM(owgh) as totowgh    -- I added this one
from 
    (select mid, pid, sum(distinct owgh) as owgh, sum(nwgh) as nwgh from test group by mid, pid) as A
GROUP BY mid
4
seventyeightist