2011-11-30 89 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