我有一个包含userid
points
expires
的表格,我想只汇总与特定userid
和CURTIME() < expires
匹配的所有点。
所以我做了:
select
*, sum(points) as points
from infraction
where
userid=13999
and CURTIME() < expires;
但它会返回整个分数列而不是审查以下 CURTIME() < expires
条件。
解决:
抱歉!我的坏,其余的行在条件标准中。
我的解决方案是一个很好的解决方案,而且所有其他帮助者都没有回复他们GJ。
感谢所有好帮手,你很优秀。
感谢所有帮助者。
答案 0 :(得分:2)
expires
只是一次还是完整datetime
?在第二种情况下,您需要与NOW
而非CURTIME
SELECT sum(points) as points
FROM infraction
WHERE
userid=13999
AND NOW() < expires;
答案 1 :(得分:1)
您没有GROUP BY
子句,但正在选择所有列。您需要添加以下内容:
SELECT
inf.*,
infsum.points
FROM
(SELECT SUM(points) AS points, id FROM infraction GROUP BY id) AS infsum
JOIN infraction AS inf ON inf.id = infsum.id
WHERE inf.userid=13999 AND CURTIME() < inf.expires
这使用子查询通过id获取求和点(替换id
的正确列名)并通过该id将其连接到整个表。再次,用inf.id
和infsum.id
替换正确的列。
答案 2 :(得分:1)
你需要选择有限的集合,然后总结它们......
slect sum(points) as points from (select
*
from infraction
where
userid=13999
and CURTIME() < expires
) as temp1