2017-01-17 10 views
0

Вот запрос, чтобы выбрать тип Config, который имеет максимальное количество строк. Есть ли другой способ, который так же быстро, как второй запрос для выбора данных?Быстрый выбор Max SQL Query

select CONFIG_TYPE, MAX(COUNTING) FROM 
(select CONFIG_TYPE, COUNT(*) as COUNTING FROM NOTIFICATION_CONFIG GROUP BY CONFIG_TYPE) 
WHERE COUNTING = 
(select MAX(COUNTING) FROM 
(select COUNT(*) as COUNTING FROM NOTIFICATION_CONFIG GROUP BY CONFIG_TYPE) 
)GROUP BY CONFIG_TYPE 

Этот второй запрос будет выполнять работу в 1 поиска, в отличие от других, что делает его в 2.

select CONFIG_TYPE, COUNTING FROM 
(select CONFIG_TYPE, COUNT(*) as COUNTING FROM NOTIFICATION_CONFIG 
GROUP BY CONFIG_TYPE ORDER BY COUNTING DESC FETCH FIRST 1 ROW ONLY) 

просто интересно, есть ли другой способ сделать это.

+0

Я использую IBM DB2 – Jackstine

ответ

1

Используйте функции окна!

SELECT c.* 
FROM (SELECT CONFIG_TYPE, COUNT(*) as COUNTING, 
      RANK() OVER (ORDER BY COUNT(*) DESC) as seqnum 
     FROM NOTIFICATION_CONFIG 
     GROUP BY CONFIG_TYPE 
    ) c 
WHERE seqnum = 1; 

Это использует RANK(), поэтому он будет возвращать все максимальные значения (в случае связей). Если вы хотите получить один произвольный максимум в случае связей, вместо этого используйте ROW_NUMBER(). Или, если вы не хотите связей, вы можете сделать:

SELECT CONFIG_TYPE, COUNT(*) as COUNTING 
FROM NOTIFICATION_CONFIG 
GROUP BY CONFIG_TYPE 
ORDER BY COUNT(*) DESC 
FETCH FIRST 1 ROW ONLY; 
0

это просто перепутались

select CONFIG_TYPE, MAX(COUNTING) 
FROM (select CONFIG_TYPE, COUNT(*) as COUNTING 
     FROM NOTIFICATION_CONFIG 
     GROUP BY CONFIG_TYPE 
    ) 
WHERE COUNTING = (select MAX(COUNTING) 
        FROM (select COUNT(*) as COUNTING 
          FROM NOTIFICATION_CONFIG 
          GROUP BY CONFIG_TYPE 
         ) 
       ) 
GROUP BY CONFIG_TYPE 
Смежные вопросы