Oracle SQL сравнивает агрегированные строки - PullRequest
0 голосов
/ 13 июня 2018

Вид застревания в относительно простом SQL ...

Может ли кто-нибудь предложить некоторый код для извлечения GroupID для агрегированных строк (группа по GroupID), у которых aValue отличается?Например, в приведенной ниже таблице мне нужно получить GroupID '4', поскольку 2 элемента в одной группе (4) имеют разные значения aValue

GroupId ItemID  aValue
4       19      Hello 
4       20      Hello1
5       78      Hello5
5       86      Hello5

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Я бы сделал это как:

select GroupId
from table t
group by GroupId
having min(aValue) <> max(aValue);

Однако, если вы хотите все columns/expression, вы можете использовать EXISTS

select t.*
from table t
where exists (select 1  
              from table t1 
              where t1.GroupId = t.GroupId and 
                    t1.avalue <> t.avalue
             );
0 голосов
/ 13 июня 2018

Вы можете использовать предложение having и посмотреть количество различных значений:

-- CTE for your sample data
with your_table (groupid, itemid, avalue) as (
  select 4, 19, 'Hello' from dual
  union all select 4, 20, 'Hello1' from dual
  union all select 5, 78, 'Hello5' from dual
  union all select 5, 86, 'Hello5' from dual
)
select groupid
from your_table
group by groupid
having count(distinct avalue) > 1;

   GROUPID
----------
         4

Если вы на самом деле также хотите просмотреть отдельные значения, вы можете использовать аналитический счетчик в подзапросе иотфильтруйте это с where вместо having:

-- CTE for your sample data
with your_table (groupid, itemid, avalue) as (
  select 4, 19, 'Hello' from dual
  union all select 4, 20, 'Hello1' from dual
  union all select 5, 78, 'Hello5' from dual
  union all select 5, 86, 'Hello5' from dual
)
select groupid, itemid, avalue
from (
  select groupid, itemid, avalue,
    count(distinct avalue) over (partition by groupid) as value_count
  from your_table
)
where value_count > 1;

   GROUPID     ITEMID AVALUE
---------- ---------- ------
         4         19 Hello 
         4         20 Hello1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...