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 所说,不需要连接 :
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
| sku | JAN | Feb |
|-----|-----|-----|
| A1 | 2 | 1 |
| A2 | 1 | 1 |
下面有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 所说,不需要连接 :
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
| sku | JAN | Feb |
|-----|-----|-----|
| A1 | 2 | 1 |
| A2 | 1 | 1 |