2012-10-13 40 views
0

我正在設計一個人們發佈短信的網站。用戶可以評價消息(1到5)。一個用戶在同一職位 SQL Server:獲得列數和總數

    1. 避免多個等級,以便能夠獲得平均評級後:我記錄這個收視率成表。

    但我的票數也很重要。例如有10票3票(30票)的職位比2票5票的職位(10票)更有價值。現在,當我展示一個頁面,這個消息我想20展示自己的評價過於

    這是我的評價表:

    create table ratings(
    [id] int primary key identity(1,1), 
    [msgid] int, 
    [uid] int, 
    [rating] tinyint 
    ) 
    

    我希望得到20條消息從消息表的總和每封郵件的收視率和每封郵件的收視率計數。

    select 
        msg.id, msg.text, 
        sum(rate.rating), 
        count(rate.id) 
    from 
        messages as msg 
    inner join 
        ratings as rate on msg.id = rate.msgid 
    group by 
        msg.id 
    

    任何人都可以幫我用SQL查詢代碼嗎?

  • +2

    讓我們看看你已經投入解決這一努力 - 解釋你在哪裏卡住了,我們會很高興提供幫助。但我們不只是爲你寫代碼...... –

    +1

    我編輯了我的問題,並添加了我試過的代碼 –

    +0

    你的代碼有什麼問題?你會得到一個錯誤 - 如果是這樣的話:**什麼**錯誤?它沒有返回預期的數據 - 那麼**你期望的**是什麼? –

    回答

    2

    您無法選擇還沒有在group by子句中使用的列。

    嘗試:

    select 
        msg.id, msg.text, 
        sum(rate.rating), 
        count(rate.id) 
    from 
        messages as msg 
    inner join 
        ratings as rate on msg.id = rate.msgid 
    group by 
        msg.id, msg.text 
    
    +0

    +1啊 - 好趕上! –

    0

    我認爲這將起作用。

    select msgid, 
    count(msgid) MsgCount, 
         sum(rating) RatingSum 
    from ratings 
    where msgid = [some msgid] 
    group by msgid, rating 
    

    這應該適用於大多數ANSI標準的transact sql平臺。您可能需要爲特定數據庫修改它。

    感謝, - 詹姆斯沃爾什小 --Developer在大

    +2

    歡迎來到StackOverflow:如果您發佈代碼,XML或數據樣本,請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼樣本」按鈕(「{}」)以精確地格式化和語法突出它! –

    2

    您需要用select協調group by。此外,佔零個收視率,所以使用左連接:

    SELECT 
        msg.id, 
        msg.text, 
        SUM (COALESCE (rate.rating, 0)) AS ratingSum, 
        COUNT (COALESCE (rate.id, 0))  AS ratingCnt 
    FROM 
        messages as msg 
    LEFT JOIN 
        ratings rate ON msg.id = rate.msgid 
    GROUP BY 
        msg.id, 
        msg.text