Умножьте количество для многих элементов в запросе - PullRequest
1 голос
/ 30 ноября 2011

Это мой запрос:

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 i . itemtype IN (2148, 2152, 2160) Он делает СУММУ счет всех элементов ИД: 2148, 2152, 2160 Мне нужно сделать то же самое, но дополнительно умножить счет каждого элемента: 2148 * 10, 2152 * 1000, 2160 * 10000 и затем отобразить результаты в Count ряд.

Ответы [ 2 ]

1 голос
/ 30 ноября 2011

Да, вы можете 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 голосов
/ 30 ноября 2011

Не очень понятно, чего вы хотите.Возможно это:

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

или это:

SUM(i.`count`) * i.itemtype AS `Count`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...