Mam zestaw danych tabeli zestawu powtórzeń obsługi klienta na wezwanie do bieżącego roku i staram się zbudować zapytanie, aby obliczyć średni wynik na daną nazwę w danym miesiącu

Coś w rodzaju obliczania średniego wyniku dla połączeń Matta na miesiąc stycznia.

Próbowałem, ale jestem początkującym w SQL, więc mam kłopoty.

Do tej pory mam to:

Select avg("general score") as General_Score, avg("Re_score") as Re_score 
from Voc2019 
Where [Name] ="Matt"

Daje mi niedopasowanie typu błędu

Znacznie doceniłoby jakąkolwiek pomoc, którą możesz mi podać.

AKTUALIZACJA:

Kod teraz działa, ale podczas gdy to działa, nadal muszę zamówić przez daną datę, ale chcę użyć tego ciągów SQL, aby odzyskać średnią przez miesiąc określony w ciągu miesiąca, który chcę od Excel, ale nie zwraca żadnych wyników

Na przykład chcę, aby wynik AVG dla Matta w styczniu

Obecnie mam

Select avg([general score]) as general_score, ("Re_score") as Re_score 
from Voc2019 
Where [Name] ="Matt" and Score_Date = Month(2) 
1
Aeon 21 luty 2019, 00:58

2 odpowiedzi

Najlepsza odpowiedź

Głównym problemem z kodem jest, że używasz łańcucha ("general score") podczas próby odwoływania się do pola (prawdopodobnie wytwarza błąd mismatch typu).

Nie wskazałeś na pola w tabeli, która zawiera datę każdego rekordu, a więc wybór odpowiedniego zestawu zapisów dla danego miesiąca jest niemożliwe bez tych informacji.

Aby jednak poprawić bieżący kod, sugerowałem:

select avg(voc2019.[general score]) as General_Score, avg(voc2019.re_score) as Re_score 
from voc2019 
where voc2019.name = "Matt"

Jeśli miałbyś zidentyfikować pole zawierające datę każdego rekordu, można obliczyć średnią miesięcznie za pomocą czegoś takiego:

select 
    dateserial(year(voc2019.date), month(voc2019.date), 1) as [Month],
    avg(voc2019.[general score]) as General_Score, 
    avg(voc2019.re_score) as Re_score 
from 
    voc2019 
where 
    voc2019.name = "Matt"
group by
    dateserial(year(voc2019.date), month(voc2019.date), 1)

Powyższe zakłada, że tabela voc2019 zawiera pole o nazwie date randki każdego rekordu.

EDYTOWAĆ:

Ponieważ data jest faktycznie zapisana jako pole tekstowe, a nie dziedziny daty, możesz użyć funkcji DateValue, aby analizować zawartość tekstu w wartość daty.

Dlatego, aby uzyskać średni wynik dla Matta w styczniu, możesz użyć czegoś takiego jak:

select 
    avg(voc2019.[general score]) as General_Score, 
    avg(voc2019.re_score) as Re_score 
from 
    voc2019 
where 
    voc2019.name = "Matt" and 
    month(datevalue(voc2019.date)) = 1 and
    year(datevalue(voc2019.date)) = 2019

Alternatywnie, ponieważ data jest przechowywana jako tekst, można użyć operatora like, aby dopasować tylko daty w styczniu, np.:

select 
    avg(voc2019.[general score]) as General_Score, 
    avg(voc2019.re_score) as Re_score 
from 
    voc2019 
where 
    voc2019.name = "Matt" and voc2019.date like "##-01-2019"
2
Lee Mac 23 luty 2019, 21:19

Jestem bardziej zaznajomiony z SQL Składnią Oracle SQL, ale jestem pewien, że problem jest z niektórym Simple MS Access Składnia. Twój dosłowny ciąg "Matt", który powinien być pojedynczy cytowany jak w "Matt", a wsporniki kwadratowe są używane do załączenia identyfikatora kolumny tylko wtedy, gdy zawiera miejsce.

Próbować:

Select avg([general score]) as General_Score, avg(Re_score) as Re_score 
from Voc2019 
Where Name = 'Matt'
0
JasonInVegas 20 luty 2019, 22:58