что-то вроде "группировки по" для столбцов? - PullRequest
2 голосов
/ 19 сентября 2011

У меня есть такая таблица:

+----+---------+---------+--------+
| id | value_x | created | amount |
+----+---------+---------+--------+

value_x - это набор из шести строк, скажем, «один», «два», «три» и т. Д. Мне нужно создать такой отчет:

+--------------+-------------------------+-------------------+----------------------+
| day_of_month |          "one"          |      "two"        |          [etc.]      |
+--------------+-------------------------+-------------------+----------------------+
|  01-01-2011  | "sum(amount) where value_x = colum name" for this specific day     |
+--------------+-------------------------+-------------------+----------------------+

Наиболее очевидное решение:

SELECT SUM(amount), DATE(created) FROM `table_name` WHERE value_x=$some_variable GROUP BY DATE(created)

И повторять этот запрос шесть раз с другим значением для $some_variable на каждой итерации, но я взволнован, если возможно сделать это в одном запросе?

Ответы [ 2 ]

4 голосов
/ 19 сентября 2011

То, что вы спрашиваете, называется «сводной таблицей» и обычно достигается, как показано ниже.Идея заключается в том, что для каждого потенциального значения value_x вы либо производите 1 или 0 в строке, а сумму 1 и 0 получаете, чтобы получить сумму для каждого значения.

SELECT
  DATE(created),
  SUM(CASE WHEN value_x = 'one' THEN SUM(amount) ELSE 0 END) AS 'one',
  SUM(CASE WHEN value_x = 'one' THEN SUM(amount) ELSE 0 END) AS 'two',
  SUM(CASE WHEN value_x = 'one' THEN SUM(amount) ELSE 0 END) AS 'three',
  etc...
FROM table_name
GROUP BY YEAR(created), MONTH(created), DAY(created)
1 голос
/ 19 сентября 2011

Это будет близко:

SELECT
   s.day_of_month
   ,GROUP_CONCAT(CONCAT(s.value_x,':',s.amount) ORDER BY s.value_x ASC) as output
   FROM (
         SELECT DATE(created) as day_of_month
                ,value_x
                ,SUM(amount) as amount
         FROM table1
         GROUP BY day_of_month, value_x
         ) s
GROUP BY s.day_of_month

Вам нужно будет прочитать вывод и найти value_x перед :, чтобы поместить элементы в соответствующий столбец.

Преимущество этого подхода перед подходом @ Михаэля состоит в том, что вам не нужно заранее знать возможные значения поля value_x.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...