Получение сгруппированных данных в формате столбца, а не по строкам из запроса MySQL

Трудно сделать более описательный заголовок для этого. Я потратил пару часов на это сейчас и решил, что лучше спросить кого-то!

У меня есть 3 таблицы, которые выглядят примерно так

Место проживания:

    id    |    name    
    1     |   Plymouth
    2     |   Torquay
                   etc

salesRecords

    itemId   |    saleDate (unix)    |    qty    |    saleLocation    |
      123    |    UNIXTIMESTAMP      |     1     |          1         |
      458    |    UNIXTIMESTAMP      |     4     |          2         |
      215    |    UNIXTIMESTAMP      |     2     |          2         |
      541    |    UNIXTIMESTAMP      |     1     |          1         |

товары

    itemId   |    brand    |    
      123    |    1        |     etc

Очевидно, что каждая таблица на самом деле содержит больше данных, чем это, но это все, что требуется для этого.

Что мне нужно, это вывод, который может сказать мне, сколько из каждого предмета или группы предметов продано определенному местоположению. Мне нужно что-то похожее на это:

ВЫХОД

    mnth    |    yr    |    location1Sales    |     location2Sales  
     10     |   2006   |          14          |           7
     11     |   2006   |          13          |           12
     12     |   2006   |          8           |           1      ... etc

Вопрос, который я разместил здесь вчера:

MySQL подзапрос, чтобы получить список идентификаторов из одной таблицы для запроса второй таблицы

Был любезно ответил и дал мне довольно эффективный запрос для получения TOTAL объединенных продаж по всем местоположениям (нет данных о местоположении, связанных с запросом, опубликованным во вчерашнем вопросе), и это работает отлично.

Я могу, конечно, добавить дополнительный пункт к WHERE и получить только данные одного местоположения, но я хочу, чтобы все они были в одной таблице.

Сегодня я пытаюсь добавить предложение группировки / куда, чтобы добавить местоположения в запрос, но не могу понять, как создать таблицу в формате выше.

Я дошел до получения данных о местоположении в строках, но мне нужно в форме столбца, как указано выше

SELECT DAY( FROM_UNIXTIME( saleDate ) ) AS 
   DAY , MONTH( FROM_UNIXTIME( saleDate ) ) AS mnth, 
   YEAR( FROM_UNIXTIME( saleDate ) ) AS yr, 
   COUNT( s.id ) AS invCount, locations.name, 
   s.location, SUM( quantity ) AS saleQty 
FROM salesRecords s
     LEFT JOIN locations ON locations.id = s.location
     INNER JOIN products ON s.itemNo = products.id
     WHERE products.brand =  '313' <=== X
 AND s.location LIKE  '1\_%' <=== XX
 GROUP BY  `locations`.`name` , mnth, yr

X: идентификатор бренда - это переменная, необходимая для группировки товаров по бренду

XX: местоположения запрашиваются следующим образом, поскольку saleLocation хранится в дБ в виде "locationId_tilId" так как продажи отслеживаются по til, хотя для целей этих данных мне нужны все только по идентификатору местоположения, я не имею отношения к tilId

Я пытаюсь получить эти данные и превратить их в массив Javascript, чтобы я мог использовать блестящий плагин amCharts для построения диаграммы.

1 ответ

select
      year( FROM_UNIXTIME( saleDate )) as yr,
      month( FROM_UNIXTIME( saleDate )) as mnth,
      sum( if( saleLocation = 1, qty, 0 )) as Location1Sales,
      sum( if( saleLocation = 2, qty, 0 )) as Location1Sales
   from
      salesRecords
   group by
      year( FROM_UNIXTIME( saleDate )),
      month( FROM_UNIXTIME( saleDate ))

Если у вас есть другие торговые точки, просто добавьте их в конструкции SUM( IF())...

Другие вопросы по тегам