Мне нужна помощь с использованием счетчика для запроса - PullRequest
1 голос
/ 04 июля 2010

Мне нужно выбрать Список с указанием идентификатора клиента, его названия, имени и фамилии каждого клиента, который арендовал автомобиль, отсортированный в алфавитном порядке по фамилии клиента вместе с количеством размещенных заказов.

Я выполнил первую часть, но не уверен, где указать количество размещенных заказов.

Вот таблицы

create table customer
(customer_id  char(4) primary key not null,
customer_sname varchar (30) not null,
customer_fname varchar (30) not null,
customer_title varchar (6) not null,
customer_address1 varchar (35) not null,
customer_address2 varchar (35) null,
customer_postcode varchar (25) null,
customer_phone varchar (30) null,
customer_email varchar (40) null,
customer_di varchar (40) not null)
ENGINE=InnoDB;

create table car_booking
(booking_id INTEGER AUTO_INCREMENT primary key not null,
car_id char (4) not null,
customer_id char (4)  not null,
hire_sdate date not null,
hire_edate date not null)
engine=innodb

Я сделал это

select customer_id, customer_title, Customer_fname, customer_sname
from customer
where customer_id in
(select customer_id from car_booking )
order by customer_sname asc

Спасибо

Ответы [ 3 ]

1 голос
/ 04 июля 2010

Для этого потребуется использовать агрегатную функцию (COUNT), предложение GROUP BY и LEFT JOIN к таблице CAR_BOOKING:

   SELECT c.customer_id, c.customer_title, c.customer_fname, c.customer_sname,
          COALESCE(COUNT(*), 0) AS num_bookings
     FROM CUSTOMER c
LEFT JOIN CAR_BOOKING cb ON cb.customer_id = c.customer_id
 GROUP BY c.customer_id, c.customer_title, c.customer_fname, c.customer_sname
 ORDER BY c.customer_sname

Поскольку есть столбцы, не обернутые в агрегатную функцию, такую ​​как COUNT, эти столбцы должны быть определены в предложении GROUP BY.

Я использовал LEFT OUTER JOIN для таблицы CAR_BOOKINGS, чтобы вернуть клиентов, у которых нет заказов - эти записи будут показывать ноль в качестве значения в столбце num_booking. Вы можете опустить ключевое слово LEFT в запросе, чтобы вернуть только клиентов и количество заказов. COALESCE - это стандартная функция для преобразования нулевого значения в желаемое - в этом случае счетчик равен нулю ...

0 голосов
/ 04 июля 2010
select customer.customer_id, customer.customer_title, customer.customer_fname, customer.customer_sname, count(*) as Bookings
from customer JOIN car_booking ON customer.customer_id = car_booking.customer_id
GROUP BY customer.customer_id, customer.customer_title, customer.Customer_fname, customer.customer_sname
order by customer_sname asc
0 голосов
/ 04 июля 2010

В SQL Server я бы использовал:

select c.customer_id,
       c.customer_title,           
       c.customer_fname,
       c.customer_sname,
       count (*)
  from cutomer c,
       car_booking cb
 where cb.customer_id = c.customer_id
 group by c.customer_id,
          c.customer_title,
          c.customer_fname,
          c.customer_sname

Не очень близко знаком с MySQL, поэтому он может немного отличаться, но это общая идея.

...