Wstawienie wartości w puste miejsce

0

Mam zapytanie które generuje wartości pomiarów, lecz jest pewna pula która nie ma opisu (jest to spowodowane błędem pomiaru).Poniżej screen z wyniku zapytania:

SELECT kierunekWiatr, COUNT( kierunekWiatr ) AS ilosc FROM  `pomiary` WHERE miejsce =  'M1' GROUP BY kierunekWiatr ORDER BY ilosc DESC

i teraz moje pytanie, jak wstawić w wolne miejsce wartość (np. błąd pomiaru) gdy do ilości nie jest przypisany 'kierunek wiatru'? Prosze o pomoc.

0
update pomiary
set kierunekWiatr = 'błąd pomiaru'
where miejsce = 'M1' and kierunekWiatr is null 
0
CASE 
WHEN kierunekWiatr is null then 'brak danych'
ELSE kierunekWiatr
END AS kierunekWiatr
1

To są wartości puste, a nie wartości NULL... zatem:

UPDATE pomiary
SET kierunekWiatr='błąd pomiaru'
WHERE miejsce='M1' AND kierunekWiatr='';
1

Wydaje mi się, że skoro te dane są na bieżąco zbierane i i wyciągane selectem to update nie ma sensu. Za chwilę pusty kierunek pojawi się ponownie. Lepiej wstawiać frazę "błąd pomiaru" w select czyli coś co zaproponował kol.endrique ale chyba tak

 
SELECT IF(kierunekWiatr="","błąd pomiaru",kierunekWiatr) AS kierunek, COUNT( kierunekWiatr ) AS ilosc FROM  `pomiary` WHERE miejsce =  'M1' GROUP BY kierunekWiatr ORDER BY ilosc DESC
1

Jeśli chodzi o aktualizację tych danych to UPDATE jest jak najbardziej na miejscu. Jeśli te dane będą tylko przetwarzane bez wstawiania to załatwiamy tym całą sprawę.

Natomiast jeśli zbierane są na bieżąco to warto już podczas wstawiania obsłużyć taką sytuację. Trzeba starać się trzymać poprawne dane, wymagające jak najmniejszych działań po stronie wydobywania informacji z bazy. Szczególnie w przypadku dużych ilości danych korzystanie z funkcji może być niebezpieczne.

Rozmawialiśmy już przypadkach błędnych pomiarów w poprzednich wątkach, więc zależy jak autor podszedł do obsługi takiego przypadku.

0

Generalnie dane są cały czas zbierane i jest ich już dosyć duzo (13 tys rekordów). Czyli w tym przypadku chyba faktycznie najlepiej było by zrobić update całej bazy, tylko to doraźne rozwiązanie gdyż z czasem znów złych danych może przybyć (a więc musze również całego INSERTA zmodyfikować).

0

Z twoich wcześniejszych wypowiedzi wnioskuję, że chcesz te dane mimo wszystko przechowywać. Zatem rozwiązaniem w twoim przypadku jest napisanie takiego triggera, który podczas wstawiania, dla błędnych pomiarów ustawiał odpowiednie wartości. Albo uzupełnienie wszystkich kolumn poza id wartościami NULL.

0
perlon napisał(a):

Wydaje mi się, że skoro te dane są na bieżąco zbierane i i wyciągane selectem to update nie ma sensu. Za chwilę pusty kierunek pojawi się ponownie. Lepiej wstawiać frazę "błąd pomiaru" w select czyli coś co zaproponował kol.endrique ale chyba tak

 
SELECT IF(kierunekWiatr="","błąd pomiaru",kierunekWiatr) AS kierunek, COUNT( kierunekWiatr ) AS ilosc FROM  `pomiary` WHERE miejsce =  'M1' GROUP BY kierunekWiatr ORDER BY ilosc DESC

Chyba IIF(kierunekWiatr="","błąd pomiaru",kierunekWiatr)

1 użytkowników online, w tym zalogowanych: 0, gości: 1