SOLVE - 在特定条件的情况下对行列求和

时间:2012-01-23 13:38:40

标签: mysql sum

我有一个包含userid points expires的表格,我想只汇总与特定useridCURTIME() < expires匹配的所有点。

所以我做了:

select
  *, sum(points) as points
from infraction
where
  userid=13999
  and CURTIME() < expires;

但它会返回整个分数列而不是审查以下 CURTIME() < expires 条件。

解决:

抱歉!我的坏,其余的行在条件标准中。

我的解决方案是一个很好的解决方案,而且所有其他帮助者都没有回复他们GJ。

感谢所有好帮手,你很优秀。

感谢所有帮助者。

3 个答案:

答案 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.idinfsum.id替换正确的列。

答案 2 :(得分:1)

你需要选择有限的集合,然后总结它们......

slect sum(points) as points from (select
  *
from infraction
where
  userid=13999
  and CURTIME() < expires
) as temp1