首先,让我让您的查询更具可读性:
SELECT SUM(it.count)
FROM characters ch
LEFT OUTER JOIN items it ON ch.charId=it.owner_id
WHERE item_id=40001
ORDER BY SUM(it.count) DESC
LIMIT 20
这个查询有点奇怪。首先,您选择一个总和(您没有按任何分组)然后您按该总和排序,并将返回的行数限制为20?
此外,您正在执行LEFT OUTER JOIN
但随后使用表中的外部表WHERE
,这会导致删除所有只有一个字符但没有项目的行。
以下查询将执行完全相同的操作。
SELECT SUM(it.count)
FROM characters ch
JOIN items it ON ch.charId=it.owner_id
WHERE item_id=40001
现在,如果您想要多个 item_id,您要么想要两者的总数:
SELECT SUM(it.count)
FROM characters ch
JOIN items it ON ch.charId=it.owner_id
WHERE item_id IN (40001,40002)
或者你想要每个项目的总和
SELECT SUM(it.count)
FROM characters ch
JOIN items it ON ch.charId=it.owner_id
GROUP BY item_id
ORDER BY SUM(it.count) DESC
LIMIT 20
您可以将 JOIN 更改为仅执行几种项目类型:
SELECT SUM(it.count)
FROM characters ch
JOIN items it ON ch.charId=it.owner_id AND it.item_id IN (40001,40002)
GROUP BY item_id
ORDER BY SUM(it.count) DESC
LIMIT 20