【问题标题】:simpilfy sum query with multiple where使用多个 where 简化 sum 查询
【发布时间】:2015-10-05 14:05:59
【问题描述】:

例如,我的 id 为:1、2、3、4

使用给定的 ID,我想计算一列,比如说value。如何只用一个查询对每个 id 进行此查询?我的意思是,像

SELECT SUM(value) FROM table WHERE id IN('1', '2', '3', '4')

这样可以吗?

【问题讨论】:

  • 不相关,但是:如果id 是一个数字,那么您不应该将它与字符串进行比较。 '1' 是一个字符串,1 是一个数字。

标签: postgresql aggregate


【解决方案1】:

你应该使用group by

例子:

select * from test order by 1

 id | val 
----+-----
  1 |   6
  1 |   2
  1 |   4
  2 |   1
  2 |   5
  2 |   3
  3 |   9
  4 |   6
(8 rows)

select id, sum(val)
from test
where id in (1, 2, 3, 4)
group by 1
order by 1

 id | sum 
----+-----
  1 |  12
  2 |   9
  3 |   9
  4 |   6
(4 rows)    

【讨论】:

  • 这似乎不是 OP 所要求的。似乎他只想 SUM() (1,2,3,4) 中具有 id 的行的值
【解决方案2】:

处理这种情况的最简单方法是在您对 WHERE 子句满意之前不使用聚合函数(在本例中为 SUM)。开始:

SELECT id, value FROM table WHERE <conditions>

然后看看你得到的结果。一旦你拥有了所有你想要的行并且没有你不想要的行,从列列表中删除 id 并将值包装在你的聚合函数 (SUM) 中。

是的,您可以使用 IN (1,2,3,4) 之类的条件来选择您要查找的每一行。您还可以根据需要使用 AND、OR 和其他条件。

【讨论】:

    猜你喜欢
    • 2020-06-11
    • 2018-12-26
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    相关资源
    最近更新 更多