Tabela tests zawiera dane dotyczące testów mocy pewnego typu silników rakietowych. Wartości w kolejnych kolumnach oznaczają:
1. ID - numer testu
2. SN - numer seryjny silnika
3. T - czas trwania testu w sekundach
4. M1, M2, M3 - zarejestrowane wartości mocy na początku, w połowie, oraz na końcu czasu trwania testu.
Twoim zadaniem jest wyświetlenie dla każdego silnika tego testu, w którym osiągnął on najwyższą średnią wartość trzech pomiarów mocy. Musisz jednak wziąć pod uwagę następujące ograniczenia:
1. interesują nas tylko te silniki, które brały udział co najmniej w 5 testach,
2. spośród testów dotyczących silników spełniających warunek 1. interesują nas tylko te, które trwały co najmniej minutę, oraz w których najniższa wartość z trzech pomiarów była nie mniejsza niż 90% najwyższej wartości z trzech pomiarów,
3. Interesują nas tylko te silniki, dla których testy wyłonione po spełnieniu kryteriów z punktu 2. spełniają następujący warunek: najniższa średnia z trzech wyników pomiarów spośród testów dla danego silnika jest nie mniejsza niż 85% najwyższej średniej pomiarów spośród tych testów.
Wynikowa tabela powinna zawierać cztery kolumny:
1. ID
2. SN
3. MAX - zawierającą najwyższą wartość z trzech pomiarów w danym teście
4. MAX_AVG - zawierającą najwyższą średnią z pomiarów, spośród wszystkich testów dla danego silnika (po uwzględnieniu opisanych wyżej warunków). Zaokrąglij tę wartość do dwóch miejsc po przecinku.
Wyniki posortuj od najwyższej do najniższej średniej.
Próbuję tak, ale wyskakuje błąd misuse of aggregate MIN() lub COUNT() jeśli nie ma MIN(), co jest źle i jak należy to zrobić?
SELECT ID, SN, MAX(M1, M2, M3) AS [MAX], round(MAX((M1+M2+M3)/3), 2) AS MAX_AVG FROM tests where COUNT(SN) >= 5 and T >= 60 and ([MAX] * 9 / 10) <= MIN(M1, M2, M3) and (MAX_AVG * 85 / 100) <= MIN((M1+M2+M3) / 3) GROUP BY SN order by MAX_AVG desc;
Przykładowy wiersz w tabeli:
ID |
SN |
T |
M1 |
M2 |
M3 |
1 |
43Mr7463WWj18B |
189 |
723 |
750 |
573 |
2 |
54Nx7813WWj12A |
195 |
541 |
694 |
554 |