[英]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.