2010-03-10 44 views
2

您好我有一個看起來像這樣的SQL表:單MySQL查詢與數量和金額有

 
CREATE TABLE IF NOT EXISTS `designerswave_article_visited` (
    `article_visited_article_id` smallint(5) NOT NULL, 
    `article_visited_user_id` smallint(5) NOT NULL, 
    `article_user_rating` tinyint(1) DEFAULT NULL, 
    UNIQUE KEY `article_id` (`article_visited_article_id`,`article_visited_user_id`) 
) 

而且看起來像這樣的查詢:

 
SELECT SUM(article_user_rating) AS total_rating, COUNT(article_visited_user_id) AS hits 
FROM article_visited 
WHERE article_visited_article_id =1 
GROUP BY article_visited_user_id 

我的問題是評級可能如果用戶沒有對文章進行評分,則爲0或NULL。然而,爲了得到平均評分,我需要將所有不是0或NULL的評分總和除以總評分數。

我可以很容易地做到這一點與兩個查詢使用where子句。但我很想知道我是否可以在單個查詢中完成。如SUM()中的where「article_user_rating> 0」。我確定我以前見過類似的東西,但我找不到任何文檔。

+0

我很困惑,你選擇了一個特定的'article_visited_article_id'(1),並用'article_visited_user_id'分組,但是這兩列的組合是表格上的一個唯一鍵,所以這意味着你會只有每行用戶都有一行。 'GROUP BY'永遠不會分組任何行。 你究竟想要選擇什麼?某篇文章的平均評分? – 2010-03-10 00:12:56

回答

1

可以擴展where子句,但乍得說,我不知道這是否是你真正想要什麼:

SELECT SUM(article_user_rating) AS total_rating, COUNT(article_visited_user_id) AS hits 
FROM article_visited 
WHERE article_visited_article_id =1 and article_user_rating > 0 
GROUP BY article_visited_user_id 
0

正如你可以閱讀here,在MySQL「組函數忽略空值「。然後空值可以被忽略。

對於SUM集合函數,0值可以被忽略,因爲X+0=X