SQL: группировать по нескольким ограничениям - PullRequest
1 голос
/ 25 октября 2019

У меня есть простая таблица с идентификатором , ключ , уровень , таблица и данные примерно такие:Я хочу только посчитать самый высокий уровень в данном списке идентификаторов и группы по ключу. Например: я передаю [2,3], возвращаемые данные должны быть:

key toplevel count
a     3        1

я передаю [2,3,8,9], возвращаемые данные должны быть:

key toplevel count
a     3        1
c     2        2

Я не знаю, четко ли описана моя проблема (плохо в английском), пожалуйста, спросите меня, если вы не понимаете.

Ответы [ 4 ]

1 голос
/ 25 октября 2019

Вы замените keyValue в вашем ключе. Моя таблица называется [dbo]. [Table_2] Пожалуйста, проверьте это.

    select a.keyValue,a.level,MAX(rownum) as count from(
       Select 
       keyValue, 
       level, 
       ROW_NUMBER() OVER ( partition by keyValue
        order by level desc  ) as rownum 
       from
       [dbo].[Table_2]) as a
       inner join 
       (select MAX(level) as level,keyValue from [dbo].[Table_2]
         group by   keyValue)  b 
         on (a.level=b.level)and(a.keyValue=b.keyValue)
     group by a.keyValue ,a.keyValue,a.level 
1 голос
/ 25 октября 2019

Я создал данные похожие на вас и протестировал. Кажется, работа для меня. Пожалуйста, попробуйте это.

select a.`key`, a.level, count(*) as cnt 
from (select `key`, max(level) as toplevel from mytable group by `key`) b
     left join mytable a on a.`key` = b.`key` and a.level = b.toplevel and a.id in (2,3,8,9)
where a.`key` is not null
group by a.`key`, a.level
1 голос
/ 25 октября 2019

Это должно работать в PostgreSQL.

Select * from(
Select 
    keyss, 
    levels, 
    counts, 
    ROW_NUMBER() OVER ( partition by keyss
            order by levels desc) as rownum 
from
(Select keyss, levels, count(*) as counts from test where id in (2,3,4,5) group by keyss, levels) as X
) as Y
Where Y.rownum = 1;

Вы можете смоделировать row_number в MySQL или я думаю, что в последней версии MySql должна использоваться аналогичная функция.

0 голосов
/ 25 октября 2019

Попробуйте это.

Select key,MAX(level) as toplevel,COUNT(level) as count from tablename group by key

Макс получает наибольшее значение от уровня.

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