2011-11-30 86 views
1

许多项目这是我的查询:乘算在查询

SELECT 
    `i`.`itemtype` AS `Item`, 
    `p`.`name` 
    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) 
    AND `i`.`player_id` = " . intval ($main_Char->getId()) . " 
GROUP BY `i`.`itemtype` 
LIMIT 0, 30; 

是否有可能为它选择的每个项目的多计?我的意思是WHERE . ITEMTYPE IN (2148, 2152, 2160) 它确实SUM ID的所有项目的计数:2148, 2152, 2160我需要做相同的,但另外乘以每个项目的计数:2148 * 102152 * 1000,​​然后显示Count行的结果。

+0

也许你可以用一些数据澄清。查询现在返回的内容以及您想要的内容。 –

+0

@ypercube请在你的回答中看看我的评论。希望现在清楚。 – Cyclone

回答

1

是的,你可以一次SUM多列:

SELECT i.itemtype AS Item 
    , p.name 
    , SUM(CASE 
      WHEN itemtype = 2148 THEN i.count 
      ELSE 0 
     END) * 10 AS Count 
    , SUM(CASE 
      WHEN itemtype = 2152 THEN i.count 
      ELSE 0 
     END) * 1000 AS Count1 
    , SUM(CASE 
      WHEN itemtype = 2160 THEN i.count 
      ELSE 0 
     END) * 10000 AS Count2 
FROM player_items AS i 
LEFT JOIN players AS p ON i.player_id = p.id 
WHERE i.itemtype IN (2148, 2152, 2160) 
GROUP BY i.itemtype ASC 
LIMIT 0, 30 

总结这三列在一起,你可以:

SELECT t.itemType AS Item, t.Count, t.Count1, t.Count2 
    , SUM(t.Count1, t.Count2, t.Count3) AS Total 
FROM 
(
    SELECT i.itemtype AS Item 
     , p.name 
     , SUM(CASE 
       WHEN itemtype = 2148 THEN i.count 
       ELSE 0 
      END) * 10 AS Count 
     , SUM(CASE 
       WHEN itemtype = 2152 THEN i.count 
       ELSE 0 
      END) * 1000 AS Count1 
     , SUM(CASE 
       WHEN itemtype = 2160 THEN i.count 
       ELSE 0 
      END) * 10000 AS Count2 
    FROM player_items AS i 
    LEFT JOIN players AS p ON i.player_id = p.id 
    WHERE i.itemtype IN (2148, 2152, 2160) 
    GROUP BY i.itemtype ASC 
    LIMIT 0, 30 
) AS t 

或者你可以添加另一个CASE

SELECT i.itemtype AS Item 
    , p.name 
    , SUM(CASE 
      WHEN itemtype = 2148 THEN i.count 
      ELSE 0 
     END) * 10 AS Count 
    , SUM(CASE 
      WHEN itemtype = 2152 THEN i.count 
      ELSE 0 
     END) * 1000 AS Count1 
    , SUM(CASE 
      WHEN itemtype = 2160 THEN i.count 
      ELSE 0 
     END) * 10000 AS Count2 
    , SUM(CASE 
      WHEN itemtype = 2148 THEN (i.count * 10) 
      WHEN itemtype = 2152 THEN (i.count * 1000) 
      WHEN itemtype = 2160 THEN (i.count * 10000) 
      ELSE 0 
     END) AS Total 
FROM player_items AS i 
LEFT JOIN players AS p ON i.player_id = p.id 
WHERE i.itemtype IN (2148, 2152, 2160) 
GROUP BY i.itemtype ASC 
LIMIT 0, 30 
0

这是不是很清楚你想要什么。也许是这样的:

SUM(i.`count`) * COUNT(*) AS `Count` 

或本:

SUM(i.`count`) * i.itemtype AS `Count` 
+0

该查询不会使用SUM作为ID为2148,2152,2160的每个项目的计数行。我不想这样做,而是将每个“SUM”,fe。如果物品ID为2148的SUM为53,我不想将它乘以10,所以'Count'行中的结果将是'530'而不是'53',并且应该对其他物品执行相同的操作IDS。 – Cyclone