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

Zaloguj się, aby skomentować

Będziesz mógł dodać komentarz po zalogowaniu się



Zaloguj się

×