繁体   English   中英

2 GROUP BY WITH DISTINCT,SUM,COUNT:PHP MySQL

[英]2 GROUP BY WITH DISTINCT, SUM , COUNT: PHP MySQL

参考:具有共享的GROUP BY(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

根据pid列,totowgh = 6.3由DISTINCT值得出

那mid = 3的计数为5,但mid = 3的pid = 4,这与Mid = 3和pid的“ distinct” owgh = 6.3相同。

由于pid = 12等于计数1次,

1.5 + 0.6 + 1.2 + 3 = 6.3(请不要按照pid的DISTINCT值)

请注意:我需要根据不同的pid或按pid分组的owgh值。因为如果我将owgh 0.6的值替换为1.5,则它将是5.7而不是7.2,但是owgh 0.6的值属于pid = 14而不是pid = 12因此,owgh变化的总数...但我需要的是7.2

请参阅我的意思: sqlfiddle.com/#!9/2a53c/6

好的,根据您的后续评论,这就是我的想法。 首先获取不同owgh的分组,然后对主查询执行JOIN 观看演示小提琴http://sqlfiddle.com/#!9/a56e4/1

SELECT t.`mid` , 
COUNT(distinct t.`pid`) AS countmid , 
SUM(t.`nwgh`) AS totalnwgh,
xx.`totowgh`
FROM test t JOIN (
select mid, sum(owgh) as totowgh 
from (
select distinct mid, owgh from test) x
group by mid) xx ON t.`mid` = xx.`mid`
GROUP BY t.`mid`;

它将导致

mid     countmid    totalnwgh   totowgh
3          4           3.8        6.3
4          2           2.2        3.9

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM