SQL添加的问题

SQL添加的问题,sql,mysql,Sql,Mysql,请 我试图在几个不同的统计中获得用户赢得的积分的总价值,但所有内容都来自同一张表 SQL: 问题是,若并没有最佳值(默认值为0,最佳值为1),那个么“总计”和“最佳和”将一无所获。如果用户没有“最佳”,我需要0,以便正确执行计算 对不起,我的英语不好,我想你会理解的 谢谢如果best=NULL尝试合并,我假设您想要一个0值 count(COALESCE(best,0) AS best) 您应该使用COALESCE(n.best,0) 当第一个参数为NULL时,COALESCE返回第二个参数 S

我试图在几个不同的统计中获得用户赢得的积分的总价值,但所有内容都来自同一张表

SQL:

问题是,若并没有最佳值(默认值为0,最佳值为1),那个么“总计”和“最佳和”将一无所获。如果用户没有“最佳”,我需要0,以便正确执行计算

对不起,我的英语不好,我想你会理解的
谢谢

如果best=NULL尝试合并,我假设您想要一个0值

count(COALESCE(best,0) AS best)
您应该使用COALESCE(n.best,0)

当第一个参数为NULL时,COALESCE返回第二个参数

SELECT o.author_id, SUM(o.vote_value) AS vote_value, 
            COALESCE(n.best, 0) AS best_sum, 
            (SUM(o.vote_value) + (10 * COALESCE(n.best, 0))) AS total
            FROM comments o
            LEFT JOIN (
              SELECT COUNT(best) AS best, author_id
              FROM comments
              WHERE best = 1
              GROUP BY author_id
              ) n ON o.author_id = n.author_id
            GROUP BY o.author_id
            ORDER BY total DESC
            LIMIT 0, 4

我认为您的问题在于,您正在筛选出最佳值不是1的行,因此它们不包括在分组中。试试这个:

SELECT o.author_id, SUM(o.vote_value) AS vote_value, n.best AS best_sum, 
            (SUM(o.vote_value) + (10 * n.best)) AS total
            FROM comments o
            JOIN (
              SELECT SUM(best) AS best, author_id
              FROM comments
              GROUP BY author_id
              ) n ON o.author_id = n.author_id
            GROUP BY o.author_id
            ORDER BY total DESC
            LIMIT 0, 4
另外,也许我遗漏了一些东西,但是保存子查询不是很有效吗

SELECT o.author_id, SUM(o.vote_value) AS vote_value, SUM(o.best) AS best_sum, 
            (SUM(o.vote_value) + (10 * SUM(o.best))) AS total
            FROM comments o
            GROUP BY o.author_id
            ORDER BY total DESC
            LIMIT 0, 4

我想你只确定了最好的金额。道达尔需要同样的治疗。。。第二个是有效的,不需要子查询:)谢谢,你节省了我的时间:))我认为这不起作用,因为最好的总是1(WHERE子句需要它)。问题来自左连接生成空值,因此如果要使用COALESCE,必须按照sergiom的建议执行。
SELECT o.author_id, SUM(o.vote_value) AS vote_value, SUM(o.best) AS best_sum, 
            (SUM(o.vote_value) + (10 * SUM(o.best))) AS total
            FROM comments o
            GROUP BY o.author_id
            ORDER BY total DESC
            LIMIT 0, 4