# Mathematic to different columns

**URL:** <https://community.influxdata.com/t/mathematic-to-different-columns/29257>\
**Category:** InfluxDB 2\
**Created:** [March 27, 2023, 5:45pm UTC](https://community.influxdata.com/t/mathematic-to-different-columns/29257 "2023-03-27T17:45:36Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![hanhoe](https://avatars.discourse-cdn.com/v4/letter/h/43a26b/32.png) [@hanhoe](https://community.influxdata.com/u/hanhoe)\
**Post date:** [March 27, 2023, 5:45pm UTC](https://community.influxdata.com/t/mathematic-to-different-columns/29257/1 "2023-03-27T17:45:36Z")

</div>

Hello!

I have this flux command:

```auto
from(bucket: "data")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "PV")
  |> filter(fn: (r) => r["Wechselrichter"] == "1")
  |> filter(fn: (r) => r["String"] == "1" or r["String"] == "2")
  |> filter(fn: (r) => r["_field"] == "power")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> yield(name: "mean")

```

So I get 2 tables or 2 columns?

I want to set a mathematic operation on both values, but not the same:  
String 1: \_value \* 100 /3700  
String 2: \_value \* 100 / 5940

With a map I always calc both elements … how can I set different mathematic operations?

Thank you!

---

<div class="post-metadata">

**Author:** ![Anaisdg](https://sea1.discourse-cdn.com/flex023/user_avatar/community.influxdata.com/anaisdg/32/6401_2.png) [@Anaisdg](https://community.influxdata.com/u/Anaisdg)\
**Post date:** [April 4, 2023, 7:23pm UTC](https://community.influxdata.com/t/mathematic-to-different-columns/29257/2 "2023-04-04T19:23:05Z")

</div>

Hello @hanhoe,  
Make sure you’re using int or float when you perform the math.  
You can do the following:  
solution 1:

```auto
data = from(bucket: "data")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "PV")
  |> filter(fn: (r) => r["Wechselrichter"] == "1")
  |> filter(fn: (r) => r["_field"] == "power")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)

data1= data
  |> filter(fn: (r) => r["String"] == "1")
  |> map(fn: (r) => ({r with _value: r._value * 100/3700}))
  |> yield(name: "data1")

data2= data
  |> filter(fn: (r) => r["String"] == "1")
  |> map(fn: (r) => ({r with _value: r._value * 100/5940}))
  |> yield(name: "data1")

```

solution 2

```auto
from(bucket: "data")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "PV")
  |> filter(fn: (r) => r["Wechselrichter"] == "1")
  |> filter(fn: (r) => r["String"] == "1" or r["String"] == "2")
  |> filter(fn: (r) => r["_field"] == "power")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
|> map(
        fn: (r) => ({r with
            _value: if r.String == "1" then
                r._value * 100/3700
            else
               r._value * 100/5940,
        }),
    )

```

The first solution is more performant most likely.  
Thank you

---

<div class="post-metadata">

**Author:** ![Sergio\_B](https://sea1.discourse-cdn.com/flex023/user_avatar/community.influxdata.com/sergio_b/32/8227_2.png) [@Sergio\_B](https://community.influxdata.com/u/Sergio_B)\
**Post date:** [April 10, 2023, 3:45pm UTC](https://community.influxdata.com/t/mathematic-to-different-columns/29257/3 "2023-04-10T15:45:50Z")

</div>

Hi @Anaisdg one question: how can I use the variable data1 in data2?  
For example, lets asumme that data1 returns one value as in `|> mean()`

in data2, can I do the following?:

```auto
data2= data
  |> filter(fn: (r) => r["String"] == "1")
  |> map(fn: (r) => ({r with _value: r._value * data1}))
  |> yield(name: "data2")

```

Thanks
