PDA

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



Фоб
02.10.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


Вопрос: а как сделать чтоб в одной таблице показывало и количество заказов по каждому типу оплаты и количество уникальных типов оплаты для каждого сотрудника?

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

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

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

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

Фоб
07.10.2008, 12:05
Понятно, спасибо.