# Arithmetic operators

MatrixOne supports basic arithmetic operators such as addition, subtraction, multiplication, and division between vectors or between vectors and scalars. These operators perform element-by-element arithmetic and return a new vector.

Note

Subtraction (`-`), multiplication (`*`), and division (`/`) are all similar to addition examples and will not be repeated.

### Function Description

`+` is used to add two elements together.

### Function syntax

``````> SELECT para1 + para2
``````

### Examples

``````drop table if exists vec_table;
create table vec_table(a int, b vecf32(3), c vecf64(3));
insert into vec_table values(1, "[1,2,3]", "[4,5,6]");
mysql> select * from vec_table;
+------+-----------+-----------+
| a    | b         | c         |
+------+-----------+-----------+
|    1 | [1, 2, 3] | [4, 5, 6] |
+------+-----------+-----------+
1 row in set (0.00 sec)

mysql> select b + "[1,2,3]" from vec_table;
+-------------+
| b + [1,2,3] |
+-------------+
| [2, 4, 6]   |
+-------------+
1 row in set (0.00 sec)

mysql> select b + 1 from vec_table;
+-----------+
| b + 1     |
+-----------+
| [2, 3, 4] |
+-----------+
1 row in set (0.01 sec)

mysql> select cast("[1,2,3]" as vecf32(3)) + 5.0;
+----------------------------------+
| cast([1,2,3] as vecf32(3)) + 5.0 |
+----------------------------------+
| [6, 7, 8]                        |
+----------------------------------+
1 row in set (0.00 sec)
``````

### Restrictions

• When two vector type parameters are added, the dimensions of the vector should be the same.
• If two vector type parameters are added, of type vecf32 and vecf64, the result is converted to vecf64.
• When vector type and scalar type data are subtracted, vector type data needs to be subtracted.

## Divide

### Function Description

`/` Used to divide two vector elements.

## Function syntax

``````> SELECT para1 / para2
``````

### Examples

``````drop table if exists vec_table;
create table vec_table(a int, b vecf32(3), c vecf64(3));
insert into vec_table values(1, "[1,2,3]", "[4,5,6]");
mysql> select * from vec_table;
+------+-----------+-----------+
| a    | b         | c         |
+------+-----------+-----------+
|    1 | [1, 2, 3] | [4, 5, 6] |
+------+-----------+-----------+
1 row in set (0.00 sec)

mysql> select b/b from vec_table;
+-----------+
| b / b     |
+-----------+
| [1, 1, 1] |
+-----------+
1 row in set (0.00 sec)

mysql> select cast("[1,2,3]" as vecf32(3)) / b from vec_table;;
+--------------------------------+
| cast([1,2,3] as vecf32(3)) / b |
+--------------------------------+
| [1, 1, 1]                      |
+--------------------------------+
1 row in set (0.00 sec)

mysql> select b/2 from vec_table;
+---------------+
| b / 2         |
+---------------+
| [0.5, 1, 1.5] |
+---------------+
1 row in set (0.00 sec)
``````

### Restrictions

• The denominator element is not allowed to be 0, otherwise an error is generated.
• The dimension should be the same when both parameters are vector types.
• If two vector type parameters are added, of type vecf32 and vecf64, the result is converted to vecf64.
• When vector type and scalar type data are divided, vector type data needs to be divisible.