-2

I have two MySQL Querys i would like to combine.

SELECT DEVICE as Room, VALUE as Temperature FROM `current` WHERE `READING` LIKE 'temperature'
SELECT DEVICE as Room, VALUE as Humidity    FROM `current` WHERE `READING` LIKE 'humidity'

My Data Table looks like this:

DEVICE VALUE READING
Arbeitszimmer 52 humidity
Arbeitszimmer 22 temperature
Aussen 88 humidity
Aussen 1.8 temperature

The desired result should be:

Room Temperature Humidity
Arbeitszimmer 22 52
Aussen 1.8 88

I am struggeling with the SQL Query.

ps915
  • 1
  • 1

3 Answers3

0

Simple self join should work

SELECT c1.DEVICE as Room, c1.VALUE as Temperature, c2.VALUE as Humidity  
FROM `current` c1 
    join `current` c2 on c1.device = c2.device 
        and c1.`READING` = 'temperature'
        and c2.`READING` = 'humidity'

BTW there is no need to use like

RiggsFolly
  • 89,708
  • 20
  • 100
  • 143
Jens
  • 63,364
  • 15
  • 92
  • 104
0

if you have only two classs of values you could use a join with the same table

select a.device, a.value temp, b.value humidity
from current a  
inner join current a.device = b.device 
    and a.reading = 'temperature'
        and b.reading = 'humidity'
ScaisEdge
  • 129,293
  • 10
  • 87
  • 97
0

A bit of conditional aggregation to pivot the READING metrics.

SELECT `DEVICE` as Room
, MAX(CASE WHEN `READING` = 'temperature' THEN `VALUE` END) as Temperature
, MAX(CASE WHEN `READING` = 'humidity' THEN `VALUE` END) as Humidity
FROM `current` 
WHERE `READING` IN ('temperature', 'humidity') 
GROUP BY `DEVICE`
ORDER BY `DEVICE`
LukStorms
  • 28,156
  • 5
  • 30
  • 44