Ilość wartości dodatnich i ujemnych

Ilość wartości dodatnich i ujemnych
Sebastiano
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 488
0

Mam taką tabelę:

Kopiuj
id, miejsce, temp

Chciałbym z niej wyciągnąć ilość temperatur ujemnych i dodatnich dla danego miajsca w takiej postaci:
temperatury ujemne - ilość pomiarów
temperatury dodatnie - ilość pomiarów

Próbowałem mniej więcej w ten sposób ale to nie załatwia kompletnie sprawy nawet dla temp dodatnich:

Kopiuj
SELECT SUM(ilosc) FROM (SELECT COUNT(temp) AS ilosc) FROM  `tabela` WHERE miejsce='M2', temp BETWEEN 0 AND 35 GROUP BY temp ORDER BY ilosc DESC

Jak najlepiej obsłużyć wszystkie powyższe założenia? Prosze o pomoc.

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Nie wystarczy proste

Kopiuj
SELECT count(temp) FROM tabela WHERE miejsce='M2' AND temp > 0

?

Sebastiano
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 488
0
Patryk27 napisał(a):

Nie wystarczy proste

Kopiuj
SELECT count(temp) FROM tabela WHERE miejsce='M2' AND temp > 0

?

W tym momencie obsługujemy tylko temperatury dodatnie i nie sumujemy ich ilości, tylko każdy pomiar dodajemy do siebie. Generalnie chodzi o to aby z danych stworzyć wykres kołowy - procent temperatur dodatnich i procent temperatur ujemnych. Dlatego potrzebuje to w takiej postaci
ujemne - ilość odczytów temp. -
dodatnie - ilość odczytów temp. +

Edit:
w ten sposób moge załatwić ilość dodatnich:

Kopiuj
SELECT COUNT( temp ) AS ilosc_dodatnich
FROM  `tabela` 
WHERE miejsce =  'M2'
AND temp >0

tylko czy da sie tu jakoś upchać 2 założenie dla ujemnych? Czy lepiej w 2 osobnych zapytaniach to robić?

  • Rejestracja: dni
  • Ostatnio: dni
1
Kopiuj
 select COUNT(*)
FROM `tabela` WHERE miejsce='M2' and temp => 0
union
select COUNT(*)
FROM `tabela` WHERE miejsce='M2' and temp < 0
Sebastiano
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 488
0

Działa:) Zmienić trzeba było jeden mały detal na

Kopiuj
>=
abrakadaber
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6610
1

ech...

Kopiuj
select sum(case when temp >= 0 then 1 else 0 end) dodatnie, sum(case when temp < 0 then 1 else 0 end) ujemne, miejsce from tabela group by miejsce

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.