Mysql group by和sum但只在where子句中

时间:2014-07-22 09:24:40

标签: mysql

我试图通过group by获取where子句中的pid总和。

它的工作条是查看整个表的总和而不是where子句。

我现在唯一可以看到的方法是制作一个带有日期限制的临时表,但认为你可以通过where子句进行限制。

SELECT t.pid, t.ocid, sum(t.pid) as tot FROM 
(select orders.oid as ooid, orders_content.oid as coid, 
orders_content.pid as pid,  orders_content.ocid as ocid 
from orders_content, orders
 WHERE orders.oid = orders_content.oid AND 
orders.status_date > '2014-07-19 09:20:04' 
ORDER BY orders_content.oid desc LIMIT 20 )t group by t.pid ORDER BY tot DESC

我理解Limit并不适用于group by,但认为使用where子句限制会在日期之前删除数据,但整个表数据将通过sum(t.pid)求和

由于

修改

在这里添加了一个小提琴:http://sqlfiddle.com/#!2/50bbb3/8

你可以看到总和是完全错误的,并且计数有效!

1 个答案:

答案 0 :(得分:0)

重新格式化你的sql我得到了这个: -

SELECT t.pid, t.ocid, SUM(t.pid) AS tot 
FROM 
(
    SELECT orders.oid as ooid, 
            orders_content.oid as coid, 
            orders_content.pid as pid,  
            orders_content.ocid as ocid 
    FROM orders_content
    INNER JOIN orders
    ON orders.oid = orders_content.oid 
    WHERE orders.status_date > '2014-07-19 09:20:04' 
    ORDER BY orders_content.oid DESC LIMIT 20 
) t 
GROUP BY t.pid 
ORDER BY tot DESC

看看这个似乎你总结了pid字段,但是使用 GROUP BY pid ,而ocid在SELECT中但不是aggragate值,也不在GROUP BY中,因此,具有匹配的pid的行,即ocid的值来自未定义。这似乎不会产生有意义的价值。