2015-01-10 6 views
0

У меня есть таблица продукт как этотПолучить сумму умножения двух столбцов двух таблиц

PRODUCT_ID PACK_SIZE PACK_PRIZE 
3000   5  2.5 
3001   5  2.5 
3002   5  2.5 
3003   5  2.5 

таблице Order

order_id  client_id 
75001 1024 
75002 1033 
75003 1030 

ПУНКТЫ Таблица

ORDER_ID PRODUCT_ID NUMBER_ORDERED 
75001 3936 2 
75001 3557 5 
75001 3012 3 
75001 3236 4 

Client Таблица

CLIENT_ID LAST_NAME STATUS 
1021 Smith   private 
1022 Williams  corporate 
1023 Browne   private 
1024 Tinsell  corporate 

Это примеры данных, которые я только что добавил, чтобы показать данные образца. Здесь я хочу выбрать лучших 5 клиентов, которые имеют наибольшую общую сумму заказов.

Я хочу выбрать клиентов, чей статус является корпоративным и у кого наибольшее количество заказов.

Другими словами, я хочу выбрать client_id клиентов, имеющих более высокую общую сумму заказа.

Здесь я пытаюсь достичь этого вот так.

WITH CTE as (SELECT ORDERS.ORDER_ID, PRODUCTS.PACK_PRIZE, PRODUCTS.PACK_SIZE, ITEMS.NUMBER_ORDERED, 
    CLIENTS.STATUS,CLIENTS.CLIENT_ID,CLIENTS.FIRST_NAME,CLIENTS.LAST_NAME 
    FROM ORDERS INNER JOIN 
     ITEMS 
     ON ORDERS.ORDER_ID = ITEMS.ORDER_ID INNER JOIN 
     PRODUCTS 
     ON ITEMS.PRODUCT_ID = PRODUCTS.PRODUCT_ID 
     INNER JOIN 
     CLIENTS 
     ON ORDERS.CLIENT_ID = CLIENTS.CLIENT_ID 
     WHERE CLIENTS.STATUS='corporate') 
SELECT CLIENT_ID,FIRST_NAME,LAST_NAME,ORDER_ID,((PACK_PRIZE/PACK_SIZE) * NUMBER_ORDERED)AS Total 
FROM (SELECT CTE.* 
    FROM CTE 
    ORDER BY SUM(PACK_PRIZE/PACK_SIZE) * NUMBER_ORDERED DESC 
) t 
WHERE rownum <= 5; 

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

Я хочу выбрать лучших 5 клиентов, у которых самая высокая общая сумма заказа.

Все клиенты, которые являются корпоративными, должны быть выбраны. Тогда общая сумма всех заказов каждого клиента должна быть рассчитана , и я хочу выбрать клиентов с самыми высокими 10 значениями. Я использую oracle 11g.

+0

Ваше отношение слишком переполнено ... вы должны взглянуть на предложение GROUP BY. Базируясь на всех таблицах на своих идентификаторах, используйте функцию SUM вместе с GROUP BY и закажите ее. И затем выберите число, которое вы хотите. – Kousalik

ответ

1

Просто используйте что-то подобное и отрегулируйте его для вашей конкретной потребности. Здесь нет ничего сложного. Вы получите эту идею.

Все, что вам нужно, это агрегатные функции. См. documentation.

select * from (
SELECT customer_id, sum(number_ordered*(pack_prize/pack_size) as totalvalue 
FROM customers 
natural join orders 
natural join items 
natural join products 
group by customer_id order by totalvalue desc 
) WHERE rownum <= 5; 
+0

Я вычисляю всего за один заказ, получая данные из двух таблиц, а затем я хочу рассчитать общую сумму заказа для каждого пользователя. Пожалуйста, обратитесь к моим таблицам. – chathwind

+0

Значит, сумма денег, а не количество заказов, которые вы еще публикуете. Правильно ? – Kousalik

+0

Соответственно обновил ответ. идея все та же. – Kousalik

 Смежные вопросы

  • Нет связанных вопросов^_^