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

कुंजी/मान जोड़े के साथ तालिका से डेटा फ़िल्टर करना और समूह बनाना

आपकी समस्या का एक हिस्सा यह है कि आप चयन सूची में एक समग्र फ़ंक्शन का उपयोग कर रहे हैं लेकिन आप GROUP BY का उपयोग नहीं कर रहे हैं . आपको GROUP BY . का उपयोग करना चाहिए इसके समान:

GROUP BY d.testId, d.rowId

जब भी आप एक समग्र फ़ंक्शन का उपयोग कर रहे हों और आपके चयन में अन्य कॉलम हों, तो उन्हें समूह में होना चाहिए। तो आपकी पूरी क्वेरी होनी चाहिए:

select d.testId,
  d.rowId,
  max(if(f.keyName='voltage',f.keyValue,NULL)) as 'voltage',
  max(if(f.keyName='temperature',f.keyValue,NULL)) as 'temperature',
  max(if(f.keyName='velocity',f.keyValue,NULL)) as 'velocity' 
from tests t  
inner join data d 
  on t.testId = d.testId  
inner join data c 
  on t.testId = c.testId 
  and c.rowId = d.rowId  
join data f 
  on f.testId = t.testId 
  and f.rowId = d.rowId  
where (d.keyName = 'voltage' and d.keyValue < 5) 
  and (c.keyName = 'temperature' and c.keyValue = 30) 
  and (t.testType = 'testType1')
GROUP BY d.testId, d.rowId

ध्यान दें, जबकि आपकी वास्तविक डेटा संरचना आपके मूल प्रश्न में प्रस्तुत नहीं की गई है। ऐसा प्रतीत होता है कि इसे निम्नलिखित में समेकित किया जा सकता है:

select d.testid,
  d.rowid,
  max(case when d.keyName = 'voltage' and d.keyValue < 5 then d.keyValue end) voltage,
  max(case when d.keyName = 'temperature' and d.keyValue =30 then d.keyValue end) temperature,
  max(case when d.keyName = 'velocity' then d.keyValue end) velocity
from tests t
left join data d
  on t.testid = d.testid
group by d.testid, d.rowid

देखें SQL Fiddle with Demo . यह परिणाम देता है केवल एक data में शामिल होने के साथ टेबल:

| TESTID | ROWID | VOLTAGE | TEMPERATURE | VELOCITY |
-----------------------------------------------------
|      1 |     1 |       4 |          30 |       20 |
|      1 |     2 |       4 |          30 |       21 |
|      2 |     1 |       4 |          30 |       30 |
|      2 |     2 |       4 |          30 |       31 |



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL DELETE के साथ WHERE कंडीशन के लिए एक और टेबल में शामिल हों

  2. Jquery स्वत:पूर्ण और PHP:स्वत:पूर्ण फ़ील्ड में चयनित विकल्प के आधार पर mySQL डेटाबेस से डेटा के साथ इनपुट फ़ील्ड को पॉप्युलेट करना

  3. NodeJS और mysql:क्वेरी परिणाम की प्रतीक्षा करें

  4. ग्लासफ़िश में निष्क्रिय समय समाप्त होने के बाद डेटाबेस कनेक्शन जारी नहीं होता है

  5. SQL तालिका में शर्तों के साथ कॉलम नाम के रूप में कॉलम मान का चयन कैसे करें