MySql pomoc przy zapytaniu - wyliczyć średnią z liczby wystapień dziennie by user_id

Odpowiedz Nowy wątek
2019-06-10 10:51
0

Witam, dopiero stawiam pierwsze kroki i jeszcze mam problem jak skonstruować podzapytanie
proszę o wyrozumiałość i podpowiedź jak mam podliczyć średnią dla User_ID dziennie
Tutaj wyciagnołem dane w układzie
user_id // Data // Ilość
1000 // 2019-06-10 // 26 itd

teraz chcę po user_id policzyć średnią dla user_id np tydzień po tygodniu

na razie mam jakby środek warunku który chciałbym zagregować jako średnią.

select distinct(BB.user_id), DATE_FORMAT(BB.date,'%Y/%m/%d') AS niceDate, count(BB.id) as Liczba
from moja_tab as BB
group by user_id, niceDate
order by niceDate desc

z góry dziękuję za pomoc Roberto

edytowany 2x, ostatnio: Roberto33, 2019-06-10 10:59

Pozostało 580 znaków

2019-06-10 13:02
0

no to pobierz numer tygodnia i pogrupuj:

select
    user_id
   ,week(data)
   ,avg(ilosc)
from
    tab
group by
   user_id
  ,week(data)

Pozostało 580 znaków

2019-06-10 13:19
0

Dziękuje za odpowiedź no tak właśnie to między czasie ogranołem odnośnie %Y,%u
ale dalej count(BB.id) działa mi to dobrze czy COUNT as Liczba
i mam wstawić teraz obok AVR(Liczba)
..
jak wstawiam AVG(BB.id) to podlicza mi sumy ID czyli 12345+12349 zamiast dodać wartości po count 21+31+33

select  distinct(BB.user_id), DATE_FORMAT(BB.date,'%u') AS week,DATE_FORMAT(BB.date,'%W') as Nazwa_Dzień, DATE_FORMAT(BB.date,'%M,%d,%Y') as data, count(BB.id) as Liczba
from tabela1 as BB
group by BB.user_id, DATE_FORMAT(BB.date,'%Y,%u')
order by DATE_FORMAT(BB.date,'%Y,%u') desc, DATE_FORMAT(BB.date,'%j') desc 

Pozostało 580 znaków

2019-06-10 13:37
1

Piszesz strasznie chaotycznie i mam wrażenie, że bez zrozumienia, odpowiedz mi na kilka pytań:

  1. co to jest wh Ciebie i czemu ma słuzyc: distinct(BB.user_id)?
  2. Co znaczy stwierdzenie ale dalej count(BB.id) działa mi to dobrze czy COUNT as Liczba

Ja wiem, że mysql na wiele pozwala, ale wyrób sobie nawyk dodawania kolumn po ktorych grupujesz do group by, bo zaboli jak zmienisz silnik, który tego nie wspiera.

jak wstawiam AVG(BB.id) to podlicza mi sumy ID czyli 12345+12349 zamiast dodać wartości po count 21+31+33

avg to funkcja licząca średnią więc nie może zwracać sumy id... count zlicza wystapienia, pytasz o średnią a jej nie liczysz, zakladam, że chcesz policzyć średnią z kolumny ilość a jej nie widzę...

Pozostało 580 znaków

2019-06-10 14:20
0

Panczo faktycznie będzie lepiej jak napiszę o co mi chodzi jako wynik.

Ok już wyjaśniam.
(faktycznie distinct na id nie ma znaczenia bo to sa unikaty)

1.
Opiszę to co wg mnie zliczam.
dzięki Count ID zliczam ilość wierszy zwracanych wg grupowania. Później w danym tygodniu sortuje je od największej do najmniejszej.
Czyli teraz podliczyłem że USER miał
tygodniu 22 = 100 wystąpień (100 wiersz)
tygodniu 23 = 89 wystąpień
tygodniu 24 = 40 wystąpień

2.
A co chciałbym uzyskać:
W tabeli chciałbym mieć jednocześnie
tydzień 22 / 100 wystąpień / 20 średnia tygodniowa

A chciałbym mieć średnie
np by DAY zakładając tydzień pracujący 5 dni
tydzień 22 średnia 20
np by MSC średnia 15

select   BB.user_id, DATE_FORMAT(BB.date,'%u') AS week,count(BB.id) as Liczba 
from Tabela1 as BB
group by BB.user_id, DATE_FORMAT(BB.date,'%Y,%u')
order by DATE_FORMAT(BB.date,'%Y,%u') desc, DATE_FORMAT(BB.date,'%j') desc , Liczba desc

Pozostało 580 znaków

2019-06-10 14:22
0

Średnia to suma / ilość, co jest sumą?

Pozostało 580 znaków

2019-06-10 14:36
0

nie liczę sumy funkcją SUM. (z wartości kolumny id)
Zliczam ilość wystąpień count. (kolumny id dla danego okresu)

Mam wartość która jest sumą wystąpień.
i z tej sumy wystąpień chciałbym policzyć średnią.

Pozostało 580 znaków

2019-06-10 15:12
0

Ja mam problem ze zrozumieniem tego co piszesz, To gdzie masz wartość tej sumy?

Pozostało 580 znaków

2019-06-10 15:23
0
USER_ID MONTH WEEK Liczba wystąpień USER_ID w tygodniu AVERAGE_BY_MONTH
1099 6 24 200 150
1099 6 23 100 150

Ok już chyba rozumiem dlaczego nie możemy się dogadać. Staram się jak najbardziej rzetelnie przedstawić problem:)
w count wystarczy ze wpiszę gwiazdę. (i nie podaję tam konkretnej kolumny)
count(*) as 'Liczba wystąpień USER_ID w tygodniu'
A finalnie interesuje mnie policzenie średniej z tej agregacji którą wywołałem COUNT.
Obraz znaczy więcej niż treść więc może teraz będziesz mógł mnie zrozumieć.

USER_ID MONTH WEEK Liczba wystąpień USER_ID w tygodniu AVERAGE_BY_MONTH
1099 6 24 200 150
1092 6 24 70 84,5
921 6 24 55 71,5
883 6 24 99 88
110 6 24 88 60,5
999 6 24 77 44
1099 6 23 100 150
1092 6 24 99 84,5
921 6 24 88 71,5
883 6 23 77 88
110 6 23 33 60,5
999 6 23 11 44

edytowany 2x, ostatnio: Roberto33, 2019-06-10 15:29

Pozostało 580 znaków

2019-06-10 15:55
0

W czym ma pomóc przykład który podałeś, moze zacznijmy od danych początkowych, zamiast wyniku...

Pozostało 580 znaków

2019-06-10 16:04
0

Ok wstawię popołudniu dane z pierwotnej tabeli.
Ale tak w skòcie w tabeli pojawia się np. user_id O numerze 1099 w tygodniu 24 w 200 wierszach. 200 razy.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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

Robot: CCBot