Mysql

2 GROUP BY WITH DISTINCT、SUM、COUNT:PHP MYQL

  • September 12, 2015

參考:https ://stackoverflow.com/questions/32066097/group-by-with-having-distinct-php-mysql

我得到了答案(感謝 coytech),但我需要在其中多寫一列:

按照 :

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

我得到了答案

從測試 GROUP BY mid 中選擇 mid , COUNT(distinct pid) 作為 cpid , SUM(nwgh) 作為 totalnwgh

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

mid  cpid       totalnwgh
3      4          3.8
4      2          2.2 

但在上面我需要一個如下的專欄:totowgh

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

其中 totowgh = 6.3 來自不同 pid 列的 owgh 列的 DISTINCT 值

mid = 3 的計數為 5,但對於 mid = 3 不同的 pid = 4 相同的方式“不同” owgh = 6.3 對於 mid = 3 和不同的 pid。

由於 pid=12 ,列 owgh 值 1.5 是兩倍 …因此它是計數 1 次,

1.5 + 0.6 + 1.2 + 3 = 6.3 (請不要這是根據 pid 的 DISTINCT 值)

請注意:我需要根據不同的 pid 或按 pid 分組的不同 owgh 值 .. 因為如果我用 1.5 替換 owgh 0.6 的值,那麼它將是 5.7 而不是 7.2 但 owgh 0.6 的值屬於 pid = 14 而不是 pid = 12 因此 owgh 變化的總數……但我需要的是 7.2

看看我的意思:sqlfiddle.com /#!9/2a53c/6

我相信您是在要求 mid 和 pid 的每個值的 owgh 的“不同”值的總和 - 數據的不同“粒度”。

例如對於 mid = 3 然後添加 1.5 + 0.6 + 1.2 + 3.0 = 6.3; 只計算 1.5 一次而不是兩次。但是,如果 1.5 的記錄 id 用於 2 個不同的 pid 值,那麼您可能需要計算 1.5 兩次。

一種方法是預先計算一些聚合,而不是直接查詢“測試”表:

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

引用自:https://dba.stackexchange.com/questions/114846