Oracle SQL получает значение столбца, связанное с max (count ()) - PullRequest
2 голосов
/ 05 марта 2012

У меня следующий запрос. Что приводит к двум столбцам, oakid и max (количество (рейтинг)). Я хочу иметь два столбца, но вместо того, чтобы иметь максимальное значение (количество (рейтинг)), я хочу, чтобы рейтинг был связан с максимальным значением (количество (рейтинг)). Как я могу изменить свой запрос, чтобы дать мне это?

select oakid, 
  (select max(count(rating)) 
     from climbs, routes 
     where climbs.routename = routes.name 
     and climbs.climberid = oakid group by routes.rating) 
  as skill
 from climbers;

Например, если у меня есть оценки «жесткий, жесткий, легкий, легкий, легкий, средний», максимальное (кол-во (рейтинг)) будет показывать «3», так как есть 3 «легких» рейтинга, но я хочу показывать «легко», а не «3».

Ответы [ 2 ]

2 голосов
/ 05 марта 2012

Звучит так, как будто вам нужен статистический режим (наиболее часто встречающийся) рейтинг для каждого oakid или climberid. Для этого у Oracle есть удобная функция, которая называется STATS_MODE:

SELECT c.climberid AS oakid, STATS_MODE(r.rating) AS skill
FROM climbs c
INNER JOIN routes r ON (c.routename = r.name)
GROUP BY c.climberid;
0 голосов
/ 05 марта 2012

попробуйте следующее:

select oakid, 
  (select rating
     from climbs, routes 
     where climbs.routename = routes.name 
     and climbs.climberid = oakid 
         group by routes.rating 
         having max(count(rating)) = count(rating)) 
  as skill
 from climbers
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...