sql—如何将表达式存储在变量中并在单个mysql查询中重用它们

1dkrff03  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(238)

假设我有一个带有下表的数据库:

--------------------------
id  | arg1 | arg2 |  arg3
--------------------------
1   |   7  |   3  |   9  |
2   |   5  |   9  |   5  |

假设我想做一个求和查询,计算一些计算,比如:

SELECT SUM( ( arg1 + arg2 + arg3 ) / ( arg1 + arg2 + arg3 ) * ( arg1 + arg2 + arg3 ) )

如果有办法存储 ( arg1 + arg2 + arg3 ) 在一个变量中(比如说 arg_sum ),然后我们可以做:

SELECT SUM( arg_sum / arg_sum * arg_sum )

我知道这是一个非常做作的例子,但我遇到过现实世界中的场景,如果我能将方程存储在变量中并重用它们,它会让事情变得更可读。有可能吗?
像这样的事情(除非我不想 added 包括在结果集中):

SELECT SUM( arg1 + arg2 + arg3 ) as arg_sum, SUM( arg_sum / arg_sum * arg_sum ) FROM my_table;
gjmwrych

gjmwrych1#

您可以使用这样的临时表:
假设主表的名称是 args ```
CREATE TEMPORARY TABLE TempSums
SELECT
args.id,
arg1 + arg2 + arg3 as sum from args

现在,你可以用 `TempSums` 像这样的table:

SELECT SUM( ( sum ) / ( sum ) * ( sum ) ) FROM TempSums

vyu0f0g1

vyu0f0g12#

您可以使用compute来计算它们的值,并在“from”子句中使用的表表达式中命名它们。例如:

create table abc (
  id int,
  arg1 int,
  arg2 int,
  arg3 int
);

insert into abc (id, arg1, arg2, arg3) values (1, 7, 3, 9); -- sum = 19
insert into abc (id, arg1, arg2, arg3) values (2, 4, 9, 5); -- sum = 18

select *, sum(arg_sum  / arg_sum * arg_sum) as result
  from (
    select *, (arg1 + arg2 + arg3) as arg_sum from abc
  ) x
  where id = 1;

结果:

id  arg1  arg2  arg3  arg_sum  result
--  ----  ----  ----  -------  ------
1   7     3     9     19       19
yrwegjxp

yrwegjxp3#

举个例子。。。

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id INT NOT NULL
,arg INT NOT NULL
,val INT NOT NULL
,PRIMARY KEY(id,arg)
);

INSERT INTO my_table VALUES
(1,1,7),
(1,2,3),
(1,3,9),
(2,1,5),
(2,2,9),
(2,3,5);

SELECT SUM(arg_sum/(arg_sum*arg_sum)) 
  FROM 
     ( SELECT id, SUM(val) arg_sum FROM my_table GROUP BY id)n;
+--------------------------------+
| SUM(arg_sum/(arg_sum*arg_sum)) |
+--------------------------------+
|                         0.1053 |
+--------------------------------+

相关问题