2016-05-26 4 views
1

У меня есть следующий SQL-запрос:найти 5 лучшие результаты для нескольких значений в результате SQL

SELECT v.venue_id, s.zip, COUNT(*) 
FROM bcs_scans s 
JOIN bcs_scanners sc ON s.uuid = sc.uuid 
JOIN bcs_venues v ON sc.venue_id = v.venue_id 
WHERE v.banlist_id = '625' 
AND s.del =0 
GROUP BY s.zip 
ORDER BY COUNT(*) DESC 

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

zip results

Как я могу идти о выборе топ-5 почтовых индексов для каждого уникального идентификатора места проведения?

Я считаю, что я могу запустить подзапрос, который группирует результаты по идентификатору с места проведения топ-5 рассчитывает на молнии, но я не уверен, с чего начать

ответ

0

Может быть выбран результат в этом случае ... немного комплекс ..

, используя имеющий для извлечения значения, которые соответствуют максимальное кол-группу по venue_id из исходного запроса ..

SELECT v.venue_id as venue_id, s.zip as , COUNT(*) as num 
    FROM bcs_scans s 
    JOIN bcs_scanners sc ON s.uuid = sc.uuid 
    JOIN bcs_venues v ON sc.venue_id = v.venue_id 
    WHERE v.banlist_id = '625' 
    AND s.del =0 
    GROUP BY s.zip 
    HAVING (v.venue_id, COUNT(*)) in 
    (select venue_id, max(num) 
    from 
    (SELECT v.venue_id as venue_id, s.zip as , COUNT(*) as num 
    FROM bcs_scans s 
    JOIN bcs_scanners sc ON s.uuid = sc.uuid 
    JOIN bcs_venues v ON sc.venue_id = v.venue_id 
    WHERE v.banlist_id = '625' 
    AND s.del =0 
    GROUP BY s.zip 
    ORDER BY COUNT(*) DESC) a t 
    group by venue_id) 
    ORDER BY COUNT(*) limit 5