Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

ग्रुप बाय के साथ mysql पिवट क्वेरी परिणाम

PIVOT करना न तो आसान (न ही अच्छा) है। मैं CASE . का उपयोग करना पसंद करता/करती हूं :

SELECT d.data_timestamp
     , SUM( CASE WHEN data_id =  1 THEN data_value ELSE 0 END ) AS 'input_1'
     , SUM( CASE WHEN data_id =  2 THEN data_value ELSE 0 END ) AS 'input_2'
     ...
     , SUM( CASE WHEN data_id = 20 THEN data_value ELSE 0 END ) AS 'input_20'
FROM data 
GROUP BY data_timestamp
ORDER BY data_timestamp ASC

लेकिन IF MySQL में भी काम करता है:

SELECT d.data_timestamp
     , SUM( IF(data_id =  1, data_value, 0) ) AS 'input_1'
     , SUM( IF(data_id =  2, data_value, 0) ) AS 'input_2'
     ...
     , SUM( IF(data_id = 20, data_value, 0) ) AS 'input_20'
FROM data 
GROUP BY data_timestamp
ORDER BY data_timestamp ASC

वैकल्पिक रूप से, आप 20-स्तरीय JOIN का उपयोग कर सकते हैं :

SELECT d.data_timestamp
     , d01.data_value AS 'input_1'
     , d02.data_value AS 'input_2'
     ...
     , d20.data_value AS 'input_20'
FROM
  ( SELECT DISTINCT d.data_timestamp
    FROM data
  ) AS d 
  LEFT JOIN data AS d01
    ON d01.data_timestamp = d.data_timestamp
    AND d01.data_id =  1
  LEFT JOIN data AS d02
    ON d02.data_timestamp = d.data_timestamp
    AND d02.data_id =  2
  ...                                   --- 20 JOINs
  LEFT JOIN data AS d20
    ON d20.data_timestamp = d.data_timestamp
    AND d20.data_id = 20
ORDER BY d.data_timestamp ASC


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL कनेक्शन (max_connections) कैसे बढ़ाएं?

  2. MYSQL 5.7 में नेटिव JSON सपोर्ट:MYSQL में JSON डेटा टाइप के फायदे और नुकसान क्या हैं?

  3. मौजूदा तालिका में ऑटो-इन्क्रीमेंट आईडी जोड़ें?

  4. NaviCat MySQL क्लाइंट का उपयोग करके डेटाबेस से कैसे कनेक्ट करें

  5. MYsql तालिका से अद्वितीय या प्राथमिक कुंजी निकालने की क्वेरी