【发布时间】:2010-05-27 15:49:26
【问题描述】:
我有 2 张桌子:会员和 cmets。 我选择所有成员,然后加入 cmets。 但是在 cmets 中,我选择了一些点的总和,如果用户从未发表过评论,我无法让该用户出现在列表中?!
如果用户从未评论过,如何将 SUM 的默认值选择为 0,或其他解决方案:
SELECT c.comment_id AS item_id, m.member_id AS member_id, m.avatar,
SUM(c.vote_value) AS vote_value, SUM(c.best) AS best,
SUM(c.vote_value) + SUM(c.best)*10 AS total
FROM members m
LEFT JOIN comments c ON m.member_id = c.author_id
GROUP BY c.author_id
ORDER BY m.member_id DESC
LIMIT 0, 20
编辑:
我会尽力解释... 所以有2个表,成员和cmets。我需要列出所有用户的排名。 评论拥有所有投票和最佳答案。
所以,我需要列出所有用户,然后他们得分。
成员表:
member_id - username - avatar
评论表
comment_id - author_id - vote_value - best (0 OR 1)
也尝试从 COMMENTS 中选择并加入 MEMBERS,但又是同样的事情:(
【问题讨论】:
-
您能否提供一些具有预期输出的示例数据?我不使用 MySQL,所以也许他们有一些快捷语法,但你只在一个列上进行 GROUPing,但在你的 SELECT 中有几个非聚合列
-
@Tom H.:MySQL 实际上允许这种语法:GROUP BY and HAVING with Hidden Columns。
-
谢谢彼得。我知道至少有一个主要的 RDBMS 允许这样做,但不记得是哪个。因为它允许“不合逻辑”的分组,但它可能导致“丢失”数据,因为“使用此功能时,每个组中的所有行都应该具有相同的值,用于从 GROUP BY 部分省略的列。服务器是免费的从组中返回任何值,因此除非所有值都相同,否则结果是不确定的。”对于给定的 c.author_id,c.comment_id 可能并不总是相同
-
我用表格结构编辑了我的问题,也许它有助于更好地理解。谢谢
-
尝试分解您的查询并重新构建它,看看是什么部分破坏了它。从“SELECT m.member_id, SUM(c.vote_value) FROM ...”开始以确保它有效,然后一次添加其他 SUM 和列以找出问题。
标签: mysql