SQL添加的问题
请 我试图在几个不同的统计中获得用户赢得的积分的总价值,但所有内容都来自同一张表 SQL: 问题是,若并没有最佳值(默认值为0,最佳值为1),那个么“总计”和“最佳和”将一无所获。如果用户没有“最佳”,我需要0,以便正确执行计算 对不起,我的英语不好,我想你会理解的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
谢谢如果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