Search code examples
mysqlselectmariadbpivot-tablegroup-concat

select all rows with same column to separate columns in mysql


I have a table like this :

fkey | sensor | depth | value 
-----+--------+-------+-------
1    | 1      | 1     | 34
1    | 1      | 2     | 27
1    | 2      | 1     | 22
1    | 2      | 2     | 34
1    | 2      | 3     | 56
2    | 1      | 1     | 12
2    | 1      | 2     | 24
2    | 2      | 1     | 56
3    | 1      | 1     | 43
3    | 1      | 2     | 89
3    | 1      | 3     | 97

How to write select query to GROUP_CONCAT value for each sensor and ORDER BY depth to show this?

fkey | sensor1_values  |  sensor2_values
-----+-----------------+------------------
1    | 34,27           |  22,34,56 
2    | 12,24           |  56
3    | 43,89,97        |  NULL  

Solution

  • Try using GROUP_CONCAT with a CASE expression to target each of the sensor data.

    SELECT
        fkey,
        GROUP_CONCAT(CASE WHEN sensor=1 THEN value END ORDER BY depth) AS sensor1_values,
        GROUP_CONCAT(CASE WHEN sensor=2 THEN value END ORDER BY depth) AS sensor2_values
    FROM yourTable
    GROUP BY fkey;