2016-10-29 79 views
0

我有一個數據庫,用於存儲用戶給出的答案(表'risposta_utente')到屬於不同課程(表'lezioni')的問題。 我想獲得用戶回答問題所得票數的最高平均值。from子句中的Mysql子查詢給出語法錯誤

ID_corso_sede_utente唯一標識一個用戶遵循一門課程的課程(因爲有多個課程)。

SELECT titolo, MAX(voto) as voto_max 
FROM (
    SELECT AVG(voto_grezzo) as voto, ID_lezione 
    FROM risposta_utente 
    WHERE ID_corso_sede_utente = 260, risposta_utente.attivo = 1 
    GROUP BY ID_lezione 
) AS voti 
JOIN lezioni 
ON lezioni.ID_lezione=voti.ID_lezione 

第2,3和7行(圍繞括號包含子查詢)的Mysql信號錯誤。特別地說:

  • 期望表達, 「(」 發現(第2行);
  • 意外的標記附近 「(」(第3行);
  • 意外的標記附近 「)」(第7行) ;
  • 未知的關鍵字鄰近 「AS」(第7行); '位置' 從句應該用 「和」,而不是逗號分隔
+1

'WHERE ID_corso_sede_utente = 260,risposta_utente.attivo = 1'也許應該是'WHERE ID_corso_sede_utente = 260和risposta_utente .attivo = 1' –

+0

@JoachimIsaksson這是問題。謝謝 –

+0

只是好奇 - 你怎麼知道它是260? – Strawberry

回答

1

;

  • 意外的標記附近 「voti」(第7行)。

    SELECT titolo, MAX(voto) as voto_max 
    FROM (
        SELECT AVG(voto_grezzo) as voto, ID_lezione 
        FROM risposta_utente 
        WHERE ID_corso_sede_utente = 260 **and** risposta_utente.attivo = 1 
        GROUP BY ID_lezione 
    ) AS voti 
    JOIN lezioni 
    ON lezioni.ID_lezione=voti.ID_lezione 
    

    還有一件事,如果你正在運行這是unix mysql控制檯,然後添加選項卡將引發錯誤。刪除每行之前的空格,然後嘗試執行

    SELECT titolo, MAX(voto) as voto_max 
    FROM (
    SELECT AVG(voto_grezzo) as voto, ID_lezione 
    FROM risposta_utente 
    WHERE ID_corso_sede_utente = 260 **and** risposta_utente.attivo = 1 
    GROUP BY ID_lezione 
    ) AS voti 
    JOIN lezioni 
    ON lezioni.ID_lezione=voti.ID_lezione 
    

    或嘗試將其作爲單行執行。

  • +1

    問題在於AND。無論如何也要感謝第二個提示;我從來沒有在unix mysql控制檯中啓動查詢,但這是一個有用的信息。 –

    0

    where命令應該是表達式。

    要麼

    WHERE ID_corso_sede_utente = 260 AND risposta_utente.attivo = 1 
    

    WHERE ID_corso_sede_utente = 260 OR risposta_utente.attivo = 1 
    

    根據你的業務邏輯