Страница 1 из 1

Запрос с двумя count(), один из которых distinct

Добавлено: 02 окт 2008, 13:02
Фоб
Объясню на примере демонстрационной базы DBDEMOS, поставляемой с билдером.

Есть таблица сотрудников и таблица заказов. У каждого из заказов один из типов оплаты (Visa, Check, Credit и т.д. всего штук 8 уникальных).

Надо вывести список сотрудников, и для каждого указать количество уникальных типов оплаты среди всех проведённых им заказов, а также, вывести количество заказов каждого типа оплаты.

Например, если у сотрудника 4 заказа оплачены визой и 3 чеком, должно вывестись, что у него 2 уникальных типа, и для каждого типа - количество.

Загвоздка в том, что если выводится каждый из типов, поле count(distinct ...) для каждого показывает 1, как, например, в результате такого запроса:

Код: Выделить всё

select
  employee.lastName,
  employee.firstname,
  orders.paymentmethod,
  count(orders.paymentmethod),
  count(distinct orders.paymentmethod)
from employee, orders
  where (orders.empNo = employee.empno)
    group by employee.lastName, employee.firstname, orders.paymentmethod
Вопрос: а как сделать чтоб в одной таблице показывало и количество заказов по каждому типу оплаты и количество уникальных типов оплаты для каждого сотрудника?

Re: Запрос с двумя count(), один из которых distinct

Добавлено: 06 окт 2008, 11:05
Игорь Акопян
а зачем вам
"количество уникальных типов оплаты для каждого сотрудника"
?
если исключить последний count то вы получите запрос из которого это значение можно будет получить потом ;) для какой цели оно надо?

Re: Запрос с двумя count(), один из которых distinct

Добавлено: 06 окт 2008, 16:33
Фоб
Для цели обучения. Я придумывал сложные условия выборки и создавал запросы. И вот для упомянутых условий придумать ничего не удалось.

Ксати, как "это значение получить потом"? Могу ли я обращаться с новым запросом к таблице, являющейся результатом предыдущего запроса?

Re: Запрос с двумя count(), один из которых distinct

Добавлено: 07 окт 2008, 10:03
Игорь Акопян
если сервер позволяет, то можно сделать VIEW и обращаться к нему как к обычной таблице.

Re: Запрос с двумя count(), один из которых distinct

Добавлено: 07 окт 2008, 12:05
Фоб
Понятно, спасибо.