2012-05-11 1 views
0

Я присоединяюсь к двум таблицам, используя декартово произведение следующим образом.Oracle SQL Developer - объединение декартового продукта, подсчета/суммы и группы по

select p.type, i.amount 
FROM products p, invoice i 
where (p.account = i.id); -- column headers cant be changed despite having same info 

Это, конечно, отображает 2 столбца с соответствующими значениями.

Однако я затем хочу манипулировать данными, используя COUNT/GROUP BY и SUM/GROUP BY, но не смог найти подходящие примеры, которые я мог бы использовать, используя 2 таблицы. (делать их все отдельно, все в порядке, просто проблема их совместной работы - проблема).

Для конечного результата я хочу показать 3 столбца, показывающие группировку из 4 типов, с подсчетом записей, подпадающих под каждый тип, и общей суммой/SUM для каждого типа, например.

Тип - Количество типов - Общая стоимость

А - 5 - 500

В - 6 - 1000

С - 1 - 50

Д - 2 - 100

+0

Какие вопросы вы пытались? Что пошло не так? – Rene

+0

Ваш запрос не является декартовым продуктом. это уже операция внутреннего соединения. –

ответ

1

Вы попробовали это?

select p.type, count(p.type) Cnt, sum(i.amoumt) Total 
FROM products p, invoice i 
where (p.account = i.id) 
group by p.type 
+0

Эта работа отлично. Я уже пробовал очень похожие вещи, но не понял, насколько близко я был к решению ... Спасибо –

+0

Обратите внимание, что если вы хотите, чтобы результат был заказан p.type, то этого недостаточно, чтобы полагаться на любой случайный заказ, который вы получаете с предложением GROUP BY. Вам нужно явно использовать ORDER BY, так как GROUP BY не всегда сортирует. –

0

Имейте в виду, что результат запроса логически эквивалентно таблицы или зрения - все они являются проекцией нуля или более строк с одним или несколькими столбцами.

В общем, что вы можете сделать с таблицей с точки зрения выбора, вы также можете сделать запрос или представление. Несмотря на некоторые ограничения, вы также можете применять удаления и обновления к просмотрам и запросам так же, как и к таблице.

Если сомневаетесь, создайте запрос, который возвращает данные, которые вы хотите, а затем рассматривать его в виде таблицы:

select type, 
     count(type) count_type, 
     sum(amount) sum(amount) 
from  (select ...) 
group by type 

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

with my_data as(
    select ...) 
select type, 
     count(type) count_type, 
     sum(amount) sum(amount) 
from  my_data 
where type in (select ... from my_data) 
group by type 

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

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