2014-05-12 3 views
0

У меня есть таблица, которая содержит следующее:граф из нескольких столбцов Oracle Sql

Fruit_id  Fruit1   Fruit2 
------------------------------------- 
1   Apple    Orange 
2   Orange   Orange 
3   Orange   Orange 
4   Banana   Banana 
5   Apple    Orange 

Я хотел бы подсчитать общее число для каждого плода, так что выход что-то вроде

Fruit   Frequency 
--------------------------- 
Apple   2 
Banana   2 
Orange   6 

Я попытался

select distinct Fruit1, count(Fruit1 Fruit2) from Fruits group by Fruit1 order by count(Fruit1 Fruit2); 

Я также попытался:

select distinct Fruit1, count(Fruit1 || Fruit2) from Fruits group by Fruit1 order by count(Fruit1 Fruit2); 

Я новичок в Oracle SQL, так пожалуйста, поймите мое невежество

ответ

1

Вы можете получить количество для каждого отдельного значения фруктов в колонках Fruit1 и Fruit2 , а затем добавьте их вместе с агрегатом SUM.

«Трюк» заключается в использовании встроенного представления, которое объединяет два результата вместе с оператором set UNION ALL.

SELECT f.fruit, SUM(f.cnt) AS cnt 
    FROM (SELECT d.Fruit1 AS fruit, COUNT(1) AS cnt FROM Fruits d GROUP BY d.Fruit1 
      UNION ALL 
     SELECT e.Fruit2 AS fruit, COUNT(1) AS cnt FROM Fruits e GROUP BY e.Fruit2 
     ) f 
GROUP BY f.fruit 
ORDER BY f.fruit 
+0

РАБОТЫ !!! Большое спасибо. – user3619807

1

Вы можете использовать следующее:

select fruits, count(*) as freq 
    from (select fruit1 as fruits 
      from tbl 
     union all 
     select fruit2 as fruits 
      from tbl) 
group by fruits 
+0

Благодарим за быстрый ответ. Я дам ему попробовать – user3619807

+0

Я получаю ORA-00936: отсутствует ошибка выражения – user3619807

+0

@ user3619807 В запросе нет ничего плохого, см. Его работу по адресу http://sqlfiddle.com/#!4/32c5c/1/0 , Возможно, вы что-то опечалили. Ответ, который вы приняли, на самом деле тот же, что и мой, только что опубликованный позже. –

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