2015-07-31 2 views
0

У меня есть таблица нижеMySql Таблица автообъединение

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 

Пожалуйста посоветуйте.

ответ

0

Как 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 | 
0

Нет необходимости не присоединяется

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 
Смежные вопросы