Skocz do zawartości
elroy

Zapytanie do bazy, sumowanie z limitem.

Polecane posty

Cześć
Mam taką tabelę

    DATA_RAPORTU      |       Nazwa_indeksu         | Ilosć_sztuk_s
    --------------------------------------------------------
    2014-01-01           aaaaa                         4
    2014-01-02           aaaaa                         5
    2014-01-03           bbbbb                         3

Zliczam sobie rekordy tak:

SELECT
data_raportu, Nazwa_indeksu,
SUM(`Ilosc_sztuk_s`)
FROM
raporty

WHERE (`data_raportu` BETWEEN '".$wys."-15' AND '".$wys."-31')
GROUP BY
Nazwa_indeksu
ORDER BY
data_raportu, SUM(`Ilosc_sztuk_s`) DESC LIMIT 2


Wynik

      Nazwa_indeksu         | Ilosć_sztuk_s
--------------------------------------------------------
        aaaaa                         9
        bbbbb                         3


Teraz potrzebuję zliczyć sumę Ilosc_sztuk_s z limitem do tych 2 pozycji

Jak powinienem odpytać bazę? Dzięki za pomoc, bo mam zaćmienie i utknąłem :(


Edytowano przez elroy (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Muszę obliczyć po prostu sumę sprzedaży top10 produktów z danego okresu. Więc odpowiadając na pytanie, chyba wartość kolumny ilosc_sztuk_s ?

 

W przypadku powyższym, to do czego dążę to wartość 12 czyli suma kolumny ilosc_sztuk_s ograniczona do dziesięciu rekordów.

Edytowano przez elroy (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

select sum(t.suma) from (SELECT
data_raportu, Nazwa_indeksu,
SUM(`Ilosc_sztuk_s`) as suma
FROM
raporty

WHERE (`data_raportu` BETWEEN '".$wys."-15' AND '".$wys."-31')
GROUP BY
Nazwa_indeksu
ORDER BY
data_raportu, SUM(`Ilosc_sztuk_s`) DESC LIMIT 2) t

 

Powinno zadziałać

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Prawie :)

Jak ustawię zakres daty na jeden dzień, to zlicza prawidłową ilość, w zakresie od-do już nie. Podaje nie prawidłowe liczby.

Jakieś sugestie?

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Nie wiem czy dobrze zrozumiałem:
Jeżeli nazwa indeksu oznacza produkt, a Ty potrzebujesz obliczyć sumę sprzedaży top 10 produktów w okresie od-do.

To zapytanie zwróci Ci Top10 produktów (ich sprzedaż) w okresie 1 styczeń - 1 luty:

select
  r.nazwa_indeksu as Produkt,
  sum(r.ilosc_sztuk_s) as Sztuki
from Raporty r
where r.data_raportu between '2014-01-01' and '2014-02-01'
group by 1
order by 2 desc

Natomiast to zwróci sumę top 10 produktów w analogicznym okresie:

select
  sum(a.Sztuki)
from (
  select
    r.nazwa_indeksu as Produkt,
    sum(r.ilosc_sztuk_s) as Sztuki
  from Raporty r
  where r.data_raportu between '2014-01-01' and '2014-02-01'
  group by 1
  order by 2 desc
  limit 10) a

Daj znać czy o to Ci chodziło ?

 

P.S. Napisane w dialekcie PostgreSQL - być może będzie potrzebować kosmetycznych poprawek dla MySQL.

Edytowano przez ritchey (zobacz historię edycji)
  • Upvote 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się


×