Как я могу использовать COUNT в предложении WHERE в Oracle - PullRequest
0 голосов
/ 21 февраля 2019

Я работаю с базой данных HR и OE, которая находится в Oracle, и мне нужно сделать запрос, который показывает: имя и фамилию клиента, номер заказа и список продуктов, которые были купленыдля клиентов, у которых более 2-х заказов.

В OE находятся все таблицы, которые я использую

Вот мой запрос

SELECT cc.cust_first_name, cc.cust_last_name, oo.order_id, pi.product_name FROM
    customers cc INNER JOIN orders oo ON cc.customer_id = oo.customer_id INNER JOIN
    order_items oi ON oo.order_id = oi.order_id INNER JOIN product_information pi ON
    oi.product_id = pi.product_id
    GROUP BY cc.cust_first_name, cc.cust_last_name, oo.order_id, pi.product_name
    HAVING COUNT(oo.order_id) > 2;

А вотбаза данных enter image description here

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Вы можете использовать агрегацию для объединения информации:

SELECT cc.cust_first_name, cc.cust_last_name,
       COUNT(DISTINCT oo.order_id) as num_orders,
       LISTAGG(pi.product_name) as products
FROM customers cc INNER JOIN
     orders oo
     ON cc.customer_id = oo.customer_id INNER JOIN
     order_items oi
     ON oo.order_id = oi.order_id INNER JOIN
     product_information pi
     ON oi.product_id = pi.product_id
GROUP BY cc.cust_first_name, cc.cust_last_name
HAVING COUNT(DISTINCT oo.order_id) > 2;
0 голосов
/ 21 февраля 2019

использовать подзапрос, потому что для группового фильтра вы должны использовать тот, который вы использовали в своем запросе, но если вы хотите, где для этого фильтра чисел, то вы должны использовать подзапрос или cte

    select * from
     (
     SELECT cc.cust_first_name, cc.cust_last_name, oo.order_id, 
    pi.product_name,COUNT(oo.order_id) as cnt
    FROM
    customers cc INNER JOIN orders oo ON cc.customer_id = oo.customer_id INNER JOIN
    order_items oi ON oo.order_id = oi.order_id INNER JOIN product_information pi ON
    oi.product_id = pi.product_id
    GROUP BY cc.cust_first_name, cc.cust_last_name, oo.order_id, pi.product_name
    ) a where a.cnt>2
...