2 GROUP BY WITH DISTINCT、SUM、COUNT:PHP MYQL
參考: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