まず、クエリをもう少し読みやすくします。
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
このクエリは少し奇妙です。最初に1 つの合計を選択し (何もグループ化していません)、その合計で並べ替え、返される行数を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