2016-01-23 2 views
-1

Я пытаюсь написать запрос sql, который даст мне этот выход ниже. И вы можете увидеть таблицы, которые я добавил. Заранее спасибоcustomer-ordering table-sql

+0

Неплохая идея для скриншотов. –

+0

Хорошая домашняя работа;) – dnoeth

ответ

1

Обновленный ответ в соответствии с OP

Это даст вам только customer_id с максимальным количеством заказов. Это битовый сложный запрос для формирования в MySQL из-за отсутствия аналитической функции. Но это должно работать нормально.

select t.* from 
    (select o.customer_id, 
    count(*) as no_of_orders 
    from orders o 
    group by o.customer_id) t 
where 
t.no_of_orders = 
    (
    select max(no_of_orders) from 
     (select o.customer_id, 
     count(*) as no_of_orders 
     from orders o 
     group by o.customer_id 
     )t2 
    ) 

Смотрите демо здесь

http://sqlfiddle.com/#!9/18726a/12

Предыдущее Ответ:

Это будет работать. Left Join убеждается дать подсчет 0 в случае, если клиент не имеет никаких order

select c.customer_id,count(o.order_id) as NO_OF_ORDERS 
from customers c 
left join orders o 
on c.customer_id=o.customer_id 
group by c.customer_id 

Смотрите демо здесь

http://sqlfiddle.com/#!9/3c19e/4

+0

Utsav спасибо, но мне нужно найти количество заказов клиентов с максимальным количеством заказов. – Schecter

+0

@Schecter - Проверьте обновленный ответ, и если он работает для вас, пожалуйста, примите ответ, нажав на символ 'check' слева от вопроса. – Utsav

+0

Огромное спасибо Уцаву, сейчас он работает. У меня есть еще 3 запроса, которые я не мог написать. Можете ли вы также помочь мне в этом. – Schecter

0

Большинство диалекты SQL поддерживают функции стандартной нумерации строк ANSI , Вы можете использовать их для этой цели. Обратите внимание, что join не является необходимым:

select customer_id, cnt 
from (select o.customer_id, count(*) as cnt, 
      max(count(*)) over() as maxcnt 
     from orders o 
     group by o.customer_id 
    ) o 
where cnt = maxcnt;