MySql Table 自加入

MySql Table Self Join

下面有table

sku|date      |price
---|----------|-----
A1 |2015-01-10|3
A2 |2015-01-15|2
A1 |2015-01-20|5
A1 |2015-02-10|2
A2 |2015-02-10|1

我正在尝试获取每月的计数。我想得到下面的输出;

sku|JAN_ORDER|FEB_ORDER|JAN_TOTAL
---|---------|---------|---------
A1 |2        |1        |10
A2 |1        |1        |2

我已经尝试过自行加入和离开加入,但都没有成功,而且我有点困惑。

我使用以下代码得到的结果不正确

select s.sku, count(f.sku)
from database f, database s
where f.sku between '2015-01-01' and '2015-01-31'
and
s.sku=f.sku
group by s.sku

请指教

不需要连接

SELECT s.sku,
   SUM(IF(date = 'Jan', 1, 0)) AS JAN,
   SUM(IF(date = 'Feb', 1, 0)) AS Feb
FROM yourtable
GROUP BY sku

当然,性能会很糟糕,但是因为只有 12 个月,所以不会很糟糕。这些类型的转换总是在客户端代码中更好地完成,并且只有一个正常的

SELECT sku, COUNT(date)
FROM yourtable
GROUP BY date

正如 Marc B 所说,不需要连接 :

SQL Fiddle

MySQL 5.6 架构设置:

CREATE TABLE `database`
    (`sku` varchar(2), `date` datetime)
;

INSERT INTO `database`
    (`sku`, `date`)
VALUES
    ('A1', '2015-01-10 00:00:00'),
    ('A2', '2015-01-15 00:00:00'),
    ('A1', '2015-01-20 00:00:00'),
    ('A1', '2015-02-10 00:00:00'),
    ('A2', '2015-02-10 00:00:00')
;

查询 1:

SELECT sku,
   count(IF(month(date) = 1, sku, null)) AS JAN,
   count(IF(month(date) = 2, sku, null)) AS Feb
FROM `database`
GROUP BY sku

Results:

| sku | JAN | Feb |
|-----|-----|-----|
|  A1 |   2 |   1 |
|  A2 |   1 |   1 |