Sql 如何编写排除和查询?

Sql 如何编写排除和查询?,sql,Sql,我有一个值表: +------------+---------+ | name | value | +------------+---------+ | parameter1 | 53.8462 | | parameter2 | 7.6923 | | parameter3 | 23.0769 | | parameter4 | 15.3846 | +------------+---------+ 在没有第一个参数(参数1)的情况下,最后三个参数(参数2、参数3、参数4)的和值查

我有一个
表:

+------------+---------+
| name       | value   |
+------------+---------+
| parameter1 | 53.8462 |
| parameter2 | 7.6923  |
| parameter3 | 23.0769 |
| parameter4 | 15.3846 |
+------------+---------+
在没有第一个参数(
参数1
)的情况下,最后三个参数(
参数2
参数3
参数4
)的和值查询是什么

选择总和(值)总计
从桌子上
其中名称'parameter1'

如果您只指定了此选项

SELECT SUM(value) tot
FROM table
WHERE name<>'parameter1'
选择总和(值)总计
从桌子上
其中名称'parameter1'
但是如果你需要一些通用的解决方案,不要使用这个

select sum(value) from values where name!='parameter1';

代替!您也可以使用。

这可能有点简单,但您不能这样做:

从表中选择总和(值),其中name!='参数2'

如果您真正想要的是过去n个值的总和,您可以这样做(在SQL Server中):


通过一些空检查,因此
仍然可以工作:

SELECT SUM(coalesce(value, 0)) your_total
FROM table
WHERE coalesce(name, '') <> 'parameter1'
选择和(合并(值,0))您的总和
从桌子上
其中合并(名称“”)“参数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
您应该查看并记住以下几点:

  • 请注意,查询使用的是
    SUM
    ,而不是
    groupby
    。这是因为我们不是在聚合数据,而是在计算我们选择的每一行的
  • 请注意,顺序很重要,在我的示例I
    orderbypar
    ,但您也可以按照查询中可用的任何其他列进行排序

还讨论了窗口函数,给出了许多有用的示例。

表中没有在
名称
列中具有值“parameter”的行。你是说“参数1”吗?
SELECT SUM(coalesce(value, 0)) your_total
FROM table
WHERE coalesce(name, '') <> 'parameter1'
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