DaftAcademy / daftacademy-python_levelup-spring2020

20 stars 10 forks source link

Problem z testem "get_stat_raw_data_200" w zadaniu 5 #43

Closed mpalka31 closed 4 years ago

mpalka31 commented 4 years ago

Nie wiem czemu moja aplikacja nie chce przejść tego testu, resztę przechodzi normalnie. Mój kod wygląda tak:

class CustomerStat(BaseModel):
    CustomerId: int = None
    Email: str = None
    Phone: str = None
    Sum: float = None

class GenresStat(BaseModel):
    Name: str = None
    Sum: int = None

class Category404(BaseModel):
    detail: Error = Error(error="No such Category")

@app.get("/sales")
async def db_task_5(category: str=None):
    if category == "customers":
        cursor = app.db_connection.cursor()
        data = cursor.execute("""
            SELECT CustomerId, Email, Phone, SUM(Total) as Sum FROM(
            SELECT * FROM invoices  
            JOIN customers ON customers.CustomerId = invoices.CustomerId
            )GROUP BY CustomerId ORDER BY Sum DESC, CustomerId ASC
            """).fetchall()
        content = []
        for i in data:
            content.append(CustomerStat(
                CustomerId = i[0],
                Email = i[1],
                Phone = i[2],
                Sum = round(i[3],2)
                ))
        return content
    elif category == "genres":
        cursor = app.db_connection.cursor()
        data = cursor.execute("""
            SELECT Name, COUNT(GenreId) AS SUM FROM (
            SELECT * FROM genres 
            JOIN tracks ON tracks.GenreId = genres.GenreId
            JOIN invoice_items ON invoice_items.TrackId = tracks.TrackId
            )GROUP BY GenreId ORDER BY Sum DESC, Name ASC
            """).fetchall()
        content = []
        for i in data:
            content.append(GenresStat(
                Name = i[0],
                Sum = i[1],
                ))
        return content
    else:
        return JSONResponse(status_code=404,content=jsonable_encoder(Category404()))

W zadaniu 6 wszystkie testy przechodzą bez najmniejszego problemu. Miał może ktoś podobny problem i wie o co chodzi? Z góry wielkie dzięki za pomoc.

AvaRat commented 4 years ago

Podczepiam się pod pytanie. Mam identyczne wyniki i również nie przechodzą testu. Query natomiast możesz zrobić prościej. Po co ten zagnieżdżony SELECT?? ;) ("SELECT C.CustomerId, C.Email, C.Phone, SUM(I.Total) AS Sum \ FROM customers C JOIN invoices I ON C.CustomerId=I.CustomerId \ GROUP BY C.CustomerId ORDER BY SUM(I.Total) DESC, C.CustomerId ")

DziurewiczPiotr commented 4 years ago

Hej @mpalka31 ! Z tego co widzę nie działa u Ciebie sortowanie po CustomerId:

.
.
.
    {
        "CustomerId": 28,
        "Email": "jubarnett@gmail.com",
        "Phone": "+1 (801) 531-7272",
        "Sum": 43.62
    },
    {
        "CustomerId": 24,
        "Email": "fralston@gmail.com",
        "Phone": "+1 (312) 332-3232",
        "Sum": 43.62
    },
.
.
.
DziurewiczPiotr commented 4 years ago

Hejka @AvaRat ! U Ciebie ten sam problem.

AvaRat commented 4 years ago

Hejka @AvaRat ! U Ciebie ten sam problem.

Już wiem. Ja zaokrąglem po pobraniu danych z Bazy. Powinienem na etapie SQL Query zrobić zaokrąglenie i powinno być GIT. Dzięki za podpowiedź @DziurewiczPiotr

mpalka31 commented 4 years ago

Hej @mpalka31 ! Z tego co widzę nie działa u Ciebie sortowanie po CustomerId:

.
.
.
    {
        "CustomerId": 28,
        "Email": "jubarnett@gmail.com",
        "Phone": "+1 (801) 531-7272",
        "Sum": 43.62
    },
    {
        "CustomerId": 24,
        "Email": "fralston@gmail.com",
        "Phone": "+1 (312) 332-3232",
        "Sum": 43.62
    },
.
.
.

O kurde faktycznie. Dzięki wielkie!

mpalka31 commented 4 years ago

Podczepiam się pod pytanie. Mam identyczne wyniki i również nie przechodzą testu. Query natomiast możesz zrobić prościej. Po co ten zagnieżdżony SELECT?? ;) ("SELECT C.CustomerId, C.Email, C.Phone, SUM(I.Total) AS Sum FROM customers C JOIN invoices I ON C.CustomerId=I.CustomerId GROUP BY C.CustomerId ORDER BY SUM(I.Total) DESC, C.CustomerId ")

Dzięki za radę, przyda się na przyszłość!