Подсчитайте, сколько раз слово появляется в одном столбце - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь подсчитать, сколько раз яблоки и апельсины появляются в моем столбце фруктов. Таблица выглядит так:

Fruit
-------
Apples
Apples Oranges
Apples Oranges
Apples
Oranges

Ожидаемый результат:

Apples 4 
Oranges 3

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

SELECT 
     COUNT (CASE WHEN Fruit LIKE '%Apples%' THEN '1' END) AS Apples
     COUNT (CASE WHEN Fruit LIKE '%Oranges%' THEN '1' END) AS Oranges
FROM Fruits

Ура

Ответы [ 2 ]

1 голос
/ 06 августа 2020

Если эти фрукты состоят из одного слова и разделены пробелом, то вам может быть интересен такой generi c подход.

Строки 1-8 представляют собой образцы данных ; он у вас уже есть, поэтому не набирайте его. Код, который может вам понадобиться, начинается со строки № 10.

SQL> with fruit (fruit) as
  2  -- sample data; you have that in a table
  3    (select 'Apples'         from dual union all
  4     select 'Apples Oranges' from dual union all
  5     select 'Apples Oranges' from dual union all
  6     select 'Apples Lemon'   from dual union all
  7     select 'Oranges Plums'  from dual
  8    ),
  9  -- split fruits to rows
 10  temp as
 11    (select regexp_substr(fruit, '[^ ]+', 1, column_value) fruit
 12     from fruit cross join
 13       table(cast(multiset(select level from dual
 14                           connect by level <= regexp_count(fruit, ' ') + 1
 15                          ) as sys.odcinumberlist))
 16    )
 17  select fruit, count(*)
 18  from temp
 19  group by fruit
 20  order by fruit;

FRUIT                                                      COUNT(*)
-------------------------------------------------------- ----------
Apples                                                            4
Lemon                                                             1
Oranges                                                           3
Plums                                                             1

SQL>
1 голос
/ 06 августа 2020

Работает с суммой или подсчетом

Подключено к: Oracle База данных 12 c Enterprise Edition Release 12.2.0.1.0 - 64-битная рабочая

SQL> with t as
(
select 'Apples'            as fruits from dual union all
select 'Apples Oranges'    as fruits from dual union all
select 'Apples Oranges'    as fruits from dual union all
select 'Apples'            as fruits from dual union all
select 'Oranges'           as fruits  6   from dual
) select
     SUM (CASE WHEN fruits LIKE '%Apples%' THEN '1' END) AS Apples ,
     SUM (CASE WHEN fruits LIKE '%Oranges%' THEN '1' END) AS Oranges
FROM t 
  ;

 APPLES    ORANGES
---------- ----------
         4          3

SQL> with t as
    (
 select 'Apples'            as fruits from dual union all
select 'Apples Oranges'    as fruits from dual union all
 select 'Apples Oranges'    as fruits from dual union all
select 'Apples'            as fruits from dual union all
select 'Oranges'           as fruits from dual
) select
     COUNT (CASE WHEN fruits LIKE '%Apples%' THEN '1' END) AS Apples ,
     COUNT (CASE WHEN fruits LIKE '%Oranges%' THEN '1' END) AS Oranges
FROM t   ;

    APPLES    ORANGES
---------- ----------
         4          3

SQL>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...