2013-08-02 4 views
1

Так что я застрял неделю с этим SQL-запросом.подсчитывать элементы для каждого заказа

У меня есть следующая таблица:

CLIENT | DELIV. C. | 
--------------------- 
10  | 200  | 
10  | 700  | 
10  | 700  | 
40  | 200  | 
30  | 300  | 
20  | 400  | 
30  | 400  | 
50  | 900  | 

Мне нужно произвести следующий результат

CLIENTS W/1 DELIV C|CLIENTS W/ 2 DELIV C|CLIENTS W/ 3 DELIV C| CLIENTS 4+ DELIV C| 
---------------------------------------------------------------------------------- 
      3  |    1  |   1   |  0   | 

Спасибо заранее.

+0

Как выглядит ваш текущий запрос/что вы пробовали? – newfurniturey

+0

Вы работаете в SQL или MySQL? – newfurniturey

+0

Можете ли вы объяснить, как вы получили эти результаты? 3 | 1 | 1 | 0 '? –

ответ

2

Это агрегация на агрегацию (второй, чтобы сделать поворот):

select sum(NumDeliveries = 1) as "CLIENTS W/1 DELIV C", 
     sum(NumDeliveries = 2) as "CLIENTS W/2 DELIV C", 
     sum(NumDeliveries = 3) as "CLIENTS W/3 DELIV C", 
     sum(NumDeliveries > 3) as "CLIENTS 4+ DELIV C" 
from (select client, count(*) as NumDeliveries 
     from t 
     group by client 
    ) t; 

В большинстве других баз данных, вы бы выписывать условия использования case как:

select sum(case when NumDeliveries = 1 then 1 else 0 end) as "CLIENTS W/1 DELIV C", 

MySQL также поддерживает эту стандартную нотацию.

РЕДАКТИРОВАТЬ:

Подзапрос рассчитывает количество поставок для каждого клиента. Это довольно простой SQL, и это то, что вы хотите разворачивать (то есть переходить от строк к столбцам).

Внешний запрос - это поворот данных с помощью условной агрегации. Выражение:

 sum(NumDeliveries = 2) as "CLIENTS W/2 DELIV C", 

вычисляется следующим образом:

Выражение NumDeliveries = 2 возвращает 1, если условие истинно и ложно в противном случае. Сумма представляет собой сумму количества раз, когда это верно.

+0

Спасибо, Гордон, который работал как шарм. Не могли бы вы объяснить мне логику этого запроса. Я новичок в SQL, и я хотел бы лучше понимать SQL. Еще раз спасибо –

Смежные вопросы