【问题标题】:select sum where sum选择总和
【发布时间】:2010-08-04 14:41:14
【问题描述】:

我想根据 max+sum 条件选择一些条目。

mytable
----------
id | col1 | col2

我想选择 col1 和 col2 之和大于或等于 sum 减去 X 的最大值的所有条目。(不要问我为什么 :))

到目前为止,我设法通过:

SELECT id,SUM(col1 + col2) AS total FROM mytable GROUP BY id;

我还设法获得了总和的 MAX(尽管使用 ORDER BY/LIMIT 解决方法):

SELECT id,SUM(col + col) as total FROM mytable GROUP BY id ORDER BY total DESC LIMIT 1;

但是,每次我尝试重新使用我的别名作为条件(例如 WHERE total >= ...)时,我都会收到 “未知列”错误

任何事情都将不胜感激

【问题讨论】:

  • 对于其他有类似问题的人,WHERE 子句在您选择的表达式之前进行评估,以确定它甚至应该费心查看哪些行。 HAVING 在事后就像 WHERE,所以虽然它可能会更慢,但如果您选择的内容与您正在评估的内容相同,它会很有用。在这种情况下,您只需使用HAVING total >= x

标签: mysql sum max


【解决方案1】:

您对SUM 有一些误解。 SUM 是一个聚合函数,意味着它适用于许多记录,而不仅仅是一个。
要计算每条记录两个字段的总和,您应该只使用+ 运算符。

SELECT id, col1+col2 AS 'total'
FROM T1
WHERE
(col1+col2+x) >=(SELECT MAX(col1+col2) from T1)

【讨论】:

  • 确实我误解了 SUM 函数。 col+col1 确实适用于总数,但我仍然收到“where 子句中的未知列 'total'”错误。我试过改变total来测试(如果这个词被保留,我尝试了不同的语法,我还通过在> =之后放置一个固定值来简化where子句,没什么,我就是无法让它工作。如何我能帮你吗?
【解决方案2】:

如果您使用 group by,则需要使用 having 子句:

SELECT id,SUM(col1+col2) as total FROM mytable GROUP BY id ORDER BY total HAVING total >= x

【讨论】:

  • -1 条件是两个字段摘要减去 X 的 MAX,而不仅仅是 X。为什么要使用 SUM?!以及如何通过 group by 获得整个表的 MAX?您必须使用内部查询!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-09
  • 2010-10-23
  • 2013-01-08
相关资源
最近更新 更多