在不使用SELECT语句的情况下计算SQL中的数据?

时间:2016-06-14 04:17:14

标签: database informix

我想问一下是否可以在不使用SELECT语句的情况下计算数据? 例如:

Dept      salary
IT         4000
IT         3800
Marketing   3500
Marketing   3900
Operation   4000

数据已在订单中,但是可以输出此输出吗?

Dept      salary
IT         4000
IT         3800
Total:2    Total:7800

Marketing   3500
Marketing   3900
Total:2    Total:7400

Operation   4000
Total:1     Total:4000

不使用SELECT语句?

我的主管让我在不使用select语句的情况下找到另一种计算方法。我想知道它是否可能?如果可能的话,另一种计算方法是什么?

2 个答案:

答案 0 :(得分:0)

从技术上讲,您可以创建视图,调用视图并在给定列中打印值。不确定为什么你的主管会建议不要使用SELECT语句(DML),因为它用于选择来自db的匹配数据。

答案 1 :(得分:0)

如前所述,如果没有SELECT,就无法从表中获取数据,数据库服务器可以为您计算总和,因此您不必检索客户端中的所有值,在那里做总和,但无论如何,你仍然需要做一个SELECT

现在谁做SELECT是另一回事,你可以编写一个简单的函数或spl,它会为你运行SELECT并返回你想要的值。 从技术上讲(从应用程序的角度来看)你没有做一个“选择......”。声明,你正在做一个执行程序give_me_what_i_want()'并且SELECT在服务器中完成。

例如:

D:\infx\ids12>dbaccess stores7 -
Database selected.
> create table test (emp char(20),dept char(20), salary int);
Table created.
> insert into test values ('emp1','IT',3800);
1 row(s) inserted.
> insert into test values ('emp2','IT',4000);
1 row(s) inserted.
> insert into test values ('emp3','Marketing',3900);
1 row(s) inserted.
> insert into test values ('emp4','Marketing',3500);
1 row(s) inserted.
> insert into test values ('emp5','Operation',4000);
1 row(s) inserted.
>

假设这就是你所追求的:

> select dept,sum(salary) from test group by dept;
dept                            (sum)
Operation                        4000
IT                               7800
Marketing                        7400
3 row(s) retrieved.
>
你可以做点什么:

> create procedure get_salaries(vdept char(20)) returning int;
> return (select sum(salary) from test where dept matches vdept);
> end procedure;

Routine created.

> execute procedure get_salaries('IT');
(expression)
        7800
1 row(s) retrieved.

> execute procedure get_salaries('Operation');
(expression)
        4000
1 row(s) retrieved.

> execute procedure get_salaries('Marketing');
(expression)
        7400
1 row(s) retrieved.

> execute procedure get_salaries('*');
(expression)
       19200
1 row(s) retrieved.
>

你可以告诉你的主管你没有做SELECT,只是运行SPL而SPL通过魔法计算总和值;)