我试图通过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
你可以看到总和是完全错误的,并且计数有效!
答案 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的值来自未定义。这似乎不会产生有意义的价值。