Mysql
 sql >> база данни >  >> RDS >> Mysql

Филтриране и групиране на данни от таблица с двойки ключ/стойност

Част от проблема ви е, че използвате агрегатна функция в списъка SELECT, но не използвате GROUP BY . Трябва да използвате GROUP BY подобно на това:

ГРУПА ПО d.testId, d.rowId 

Всеки път, когато използвате агрегатна функция и имате други колони във вашия избор, те трябва да са в група по. Така че пълната ви заявка трябва да бъде:

изберете d.testId, d.rowId, max(if(f.keyName='voltage',f.keyValue,NULL)) като 'напрежение', max(if(f.keyName='temperature' ,f.keyValue,NULL)) като „температура“, max(if(f.keyName='velocity',f.keyValue,NULL)) като „скорост“ от тестове t данни за вътрешно свързване d на t.testId =d. testId данни за вътрешно присъединяване c на t.testId =c.testId и c.rowId =d.rowId данни за присъединяване f на f.testId =t.testId и f.rowId =d.rowId където (d.keyName ='напрежение' и d.keyValue <5) и (c.keyName ='temperature' и c.keyValue =30) и (t.testType ='testType1')GROUP BY d.testId, d.rowId 

Имайте предвид, че действителната ви структура от данни не е представена в оригиналния ви въпрос. Изглежда, че това може да бъде консолидирано до следното:

изберете d.testid, d.rowid, max(случай, когато d.keyName ='напрежение' и d.keyValue <5, след което d.keyValue край) напрежение, макс (случай, когато d.keyName ='температура ' и d.keyValue =30 след това d.keyValue end) температура, макс (случай, когато d.keyName ='velocity', след това d.keyValue край) velocityfrom tests tleft join data d on t.testid =d.testidgroup от d.testid , d.rowid 

Вижте SQL Fiddle с демонстрация . Това дава резултат само с едно присъединяване към data таблица:

<предварителен код>| ТЕСТИД | ROWID | НАПРЕЖЕНИЕ | ТЕМПЕРАТУРА | СКОРОСТ |------------------------------------------------ -----| 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. За какво се използват каталогът с анотации на JPA @Table и променливите на схемата?

  2. Външните ключове трябва да са индексни в mySQL?

  3. Как мога да избирам редове в обратен ред в MySQL?

  4. Вземете стойността от базата данни в selecte таг HTML PHP MySQL

  5. Това добра ли е DB схема за местоположения