怎么写排除和查询?

时间:2011-06-03 07:21:01

标签: sql

我有一个values表:

+------------+---------+
| name       | value   |
+------------+---------+
| parameter1 | 53.8462 |
| parameter2 | 7.6923  |
| parameter3 | 23.0769 |
| parameter4 | 15.3846 |
+------------+---------+

在没有第一个参数(parameter 2)的情况下,对最后三个参数(parameter 3parameter 4parameter1)的总和值的查询是什么?

6 个答案:

答案 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 非常重要,在我的示例中我是ORDER BY PAR,但您也可以按查询中提供的任何其他列进行排序。

Oracle Data Warehousing Guide还讨论了窗口函数,给出了很多有用的例子。