从表中选择相同的SUM,同一列选择两个不同的ID

时间:2013-03-31 00:05:47

标签: mysql

我有一个问题&我是新手。

我有一张叫做“物品”的桌子 并且有ID列和计数列 我还有一个字符表,它是项目ID的所有者

我这里有一个工作的代码..并显示项目及其计数的顶部字符.. 解释更多..

"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");)

所以我想要的是让它从同一个项目表和相同的列数中获取第二个项目ID的列表......

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

首先,让我让您的查询更具可读性:

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