0

很难为此制定一个更具描述性的标题。我现在已经花了几个小时,并且认为最好只是问别人!

我有 3 张桌子,看起来像这样

地点:

    id    |    name    
    1     |   Plymouth
    2     |   Torquay
                   etc

销售记录

    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子查询从一个表中获取ID列表以查询第二个表

得到了友好的回答,并给了我一个相当有效的查询来检索TOTAL所有位置的组合销售额(根本没有与昨天问题中发布的查询相关的位置数据),而且效果很好。

我当然可以添加一个附加子句WHERE并仅获取单个位置的数据,但我希望所有这些都在一个表中。

今天我试图添加一些分组/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:品牌 ID 是按品牌对产品进行分组所需的变量

XX:位置是这样查询的,因为 saleLocation 以 dB 形式保存"locationId_tilId",因为销售由 til 跟踪,尽管出于此数据的目的,我只需要位置 ID,我不关心 tilId

我正在尝试获取这些数据并将其转换为 Javascript 数组,以便我可以使用出色的 amCharts 插件来绘制它。

4

1 回答 1

0
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() ) 构造...

于 2013-02-08T01:54:14.667 回答