2011-11-28 47 views
2

这是我的时刻了:在一个查询计数的许多项目

SELECT `p`.`name`, SUM(`count`) FROM `player_items` 
LEFT JOIN `players` `p` ON (`p`.`id` = `player_items`.`player_id`) 
WHERE `itemtype` IN (2148, 2152, 2160) GROUP by `player_id`, `itemtype` 

它退出的球员的名字和项目类型的ID 2148,2152的SUM,2160

我需要重写该查询,以便将选择的项目数为每个ID,这是结果应该什么样子:

| NAME | ITEM | COUNT | 
| Player | 2148 | 10 | 
| Player | 2152 | 760 | 
| Player | 2160 | 0  | 

| NAME | ITEM | COUNT | 
| Player1 | 2148 | 890 | 
| Player1 | 2152 | 5560 | 
| Player1 | 2160 | 2584 | 

结构:

Table name = player_items 
ITEM ID(2148, 2152, 2160) - itemtype 
ITEM COUNT - count. 

请记住,每个项目的ID例如可以具有其他“COUNT”的值在player_items表一个球员会像:

PLAYER_NAME | 2148 | 10 
PLAYER_NAME | 2148 | 4 
PLAYER_NAME | 2148 | 4 
PLAYER_NAME | 2152 | 60 
PLAYER_NAME | 2152 | 20 
PLAYER_NAME | 2160 | 100 

让我知道,如果你没有得到任何东西。

回答

0

我不太清楚你的问题是什么。你不只是想返回项目ID(称为itemtype)?

SELECT 
    `p`.`name` AS `Name`, 
    `i`.`itemtype` AS `Item`, 
    SUM(`i`.`count`) AS `Count` 
FROM 
    `player_items` AS `i` 
LEFT JOIN 
    `players` AS `p` 
    ON 
     (`p`.`id` = `i`.`player_id`) 
WHERE 
    `i`.`itemtype` IN (2148, 2152, 2160) 
GROUP BY 
    `i`.`player_id`, 
    `i`.`itemtype` 

这是一个社区wiki,因此如果需要的话可以更正。

+0

此外,你可能想要一个内部联接,除非你有失踪球员 – KCD