我有一个values
表:
+------------+---------+
| name | value |
+------------+---------+
| parameter1 | 53.8462 |
| parameter2 | 7.6923 |
| parameter3 | 23.0769 |
| parameter4 | 15.3846 |
+------------+---------+
在没有第一个参数(parameter 2
)的情况下,对最后三个参数(parameter 3
,parameter 4
,parameter1
)的总和值的查询是什么?
答案 0 :(得分:2)
SELECT SUM(value) tot
FROM table
WHERE name='parameter2' OR name='parameter3' OR name='parameter4'
或
SELECT SUM(value) tot
FROM table
WHERE name<>'parameter1'
答案 1 :(得分:1)
如果您仅对此有所了解
SELECT SUM(value) tot
FROM table
WHERE name<>'parameter1'
但是如果你需要一些通用解决方案而不是使用这个
答案 2 :(得分:1)
select sum(value) from values where name!='parameter1';
代替!你也可以使用&lt;&gt;。
答案 3 :(得分:1)
这可能有点过分了,但你不能这样做:
select sum(value) from table where name != 'parameter2'
如果你真正追求的是第n个值的总和,你可以这样做(在SQL Server中):
WITH OrderedRows AS
(
SELECT name, value,
ROW_NUMBER() OVER (ORDER BY name) AS 'RowNumber'
FROM table
)
SELECT sum(value)
FROM OrderedRows
WHERE RowNumber > 1;
答案 4 :(得分:1)
进行一些空值检查,因此sum
仍然有效:
SELECT SUM(coalesce(value, 0)) your_total
FROM table
WHERE coalesce(name, '') <> 'parameter1'
答案 5 :(得分:1)
如果您的目标是对最后三列求和,即使在比您的示例更大的表格上,您也在寻找移动窗口函数。
在 Oracle 中,您可以编写
WITH T AS (
SELECT 'parameter1' PAR, 2 VAL FROM DUAL
UNION ALL
SELECT 'parameter2' PAR, 3 VAL FROM DUAL
UNION ALL
SELECT 'parameter3' PAR, 5 VAL FROM DUAL
UNION ALL
SELECT 'parameter4' PAR, 7 VAL FROM DUAL
)
SELECT PAR, SUM(VAL) OVER (ORDER BY PAR ROWS 2 PRECEDING) LAST3SUM FROM T;
这将屈服于
PAR LAST3SUM
---------- ----------
parameter1 2
parameter2 5
parameter3 10
parameter4 15
你应该看看Oracle Documentation about Analytic Functions并牢记以下内容:
SUM
,但没有使用GROUP BY
。这是因为我们不是聚合数据,而是计算我们选择的每行的SUM
。ORDER BY PAR
,但您也可以按查询中提供的任何其他列进行排序。Oracle Data Warehousing Guide还讨论了窗口函数,给出了很多有用的例子。