oracle sql находит перекрывающиеся значения между двумя наборами - PullRequest
0 голосов
/ 24 апреля 2019

У меня две таблицы ('stock', 'website') имеют одинаковую структуру, обе имеют таблицу с именем product_id. Я хочу выяснить, в каком процентном соотношении product_id в таблице 'website' также находится в таблице stock '

Не нашел простого способа достичь.Надеюсь получить предложение.пробовал оператор INTERSECT

create table stock (product_id, update) as
(
  select 123, ‘201904’ from dual
  union all select 223, ‘201904’ from dual
  union all select 234, ‘201904’ from dual
  union all select 124, ‘201904’  from dual
  union all select 321, ‘201904’  from dual
  union all select 455, ‘201904’  from dual
 union all select 412, ‘201904’ from dual
);


create table website (product_id, update) as
(
  select 113, ‘201904’ from dual
  union all select 223, ‘201904’ from dual
  union all select 222, ‘201904’ from dual
  union all select 324, ‘201904’  from dual
  union all select 321, ‘201904’  from dual
  union all select 456, ‘201904’  from dual
 union all select 411, ‘201904’ from dual
);

1 Ответ

1 голос
/ 24 апреля 2019

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

WITH stock AS (select 123 product_id, '201904' update_dt from dual UNION ALL
               select 223, '201904' from dual UNION ALL
               select 234, '201904' from dual UNION ALL
               select 124, '201904' from dual UNION ALL
               select 321, '201904' from dual UNION ALL
               select 455, '201904' from dual UNION ALL
               select 412, '201904' from dual),
   website AS (select 113 product_id, '201904' update_dt from dual UNION ALL
               select 223, '201904' from dual UNION ALL
               select 222, '201904' from dual UNION ALL
               select 324, '201904' from dual UNION ALL
               select 321, '201904' from dual UNION ALL
               select 456, '201904' from dual UNION ALL
               select 411, '201904' from dual)
SELECT round(100 * COUNT(s.product_id) / COUNT(w.product_id), 2) website_in_stock_percentage
FROM   website w
       LEFT OUTER JOIN stock s ON w.product_id = s.product_id;

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