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

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

Ответить
Фоб
Сообщения: 45
Зарегистрирован: 10 ноя 2006, 14:56

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
Вопрос: а как сделать чтоб в одной таблице показывало и количество заказов по каждому типу оплаты и количество уникальных типов оплаты для каждого сотрудника?
Аватара пользователя
Игорь Акопян
Сообщения: 1419
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

06 окт 2008, 11:05

а зачем вам
"количество уникальных типов оплаты для каждого сотрудника"
?
если исключить последний count то вы получите запрос из которого это значение можно будет получить потом ;) для какой цели оно надо?
Изображение
Фоб
Сообщения: 45
Зарегистрирован: 10 ноя 2006, 14:56

06 окт 2008, 16:33

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

Ксати, как "это значение получить потом"? Могу ли я обращаться с новым запросом к таблице, являющейся результатом предыдущего запроса?
Аватара пользователя
Игорь Акопян
Сообщения: 1419
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

07 окт 2008, 10:03

если сервер позволяет, то можно сделать VIEW и обращаться к нему как к обычной таблице.
Изображение
Фоб
Сообщения: 45
Зарегистрирован: 10 ноя 2006, 14:56

07 окт 2008, 12:05

Понятно, спасибо.
Ответить