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