2013-08-27 3 views
3

У меня есть три столбца в таблице: id, streetname, count. Некоторым идентификаторам присваивается несколько названий улиц. Граф рассказывает, как часто соответствующая улица назначается идентификатору. Как я могу получить только идентификатор и имя улицы с самым высоким счетом.SQL SELECT MAX COUNT

Пример таблицы:

id  streetname  count 
1  street1  80 
1  street2  60 
1  street3  5 
2  street4  10 
2  street5  6 

Результат должен быть таким:

id  streetname 
1  street1 
2  street4 

Заранее спасибо!

+0

ВЫБЕРИТЕ ID, StreetName FROM TABLE ORDER BY COUNT DESC, а затем извлечь только одну строку – BigMike

+2

сделал и попробовать что-нибудь? –

+2

Добро пожаловать в переполнение стека! Укажите RDBMS, на которые вы нацеливаете, добавив соответствующий тег (Oracle, SQL Server, MySQL и т. Д.). Могут быть ответы, которые используют преимущества языка или функций продукта, которые не поддерживаются повсеместно. Кроме того, пометив его конкретными СУБД, ваш вопрос может привлечь внимание от людей, более подходящих для ответа на него. – Taryn

ответ

6

Вы не указали, что база данных используется но вы должны быть в состоянии использовать следующее:

select t1.id, t1.streetname, t1.count 
from yourtable t1 
inner join 
(
    select id, max(count) max_count 
    from yourtable 
    group by id 
) t2 
    on t1.id = t2.id 
    and t1.count = t2.max_count 

См SQL Fiddle with Demo. Обратите внимание: вам нужно будет избежать имени столбца count, используя обратные ссылки для MySQL или любой другой символ, используемый вашей базой данных для выхода из зарезервированных слов. Мое предложение состояло в том, чтобы избежать использования зарезервированных слов для имен столбцов и таблиц.

+0

Спасибо, это именно то, что мне нужно! Но теперь есть еще одна проблема: все идентификаторы, которые имеют одинаковое максимальное значение, не должны отображаться, потому что они не уникальны ... – user2721421

+0

@ user2721421 Я не уверен, что вы имеете в виду, но если у вас несколько идентификаторов с одинаковым именем улицы и подсчет, то вы должны иметь возможность использовать разные. Можете ли вы отредактировать скрипт sql (http://sqlfiddle.com/#!2/17dae/1) с еще несколькими образцами данных для дальнейшего объяснения проблемы? – Taryn

+0

Я изменил SQL Fiddle (http://sqlfiddle.com/#!2/86465/1/0) в соответствии с моими потребностями. Идентификатор и счет совпадают, но улица отличается. Идентификатор 3 должен быть исключен в результате, так что есть только уникальные идентификаторы 1 и 2. О ID 3 Я не могу сделать какой-либо оператор, потому что результат будет взвешен одинаково. Кстати, SQL Fiddle - отличный инструмент! – user2721421

0

Я не думаю, что это правильный путь, чтобы не уникальное имя столбца «ID», но ваша проблема должна уже была решена с помощью этого запроса:

SELECT id, streetname FROM table ORDER BY count DESC 
+0

, пожалуйста, проверьте свой код, он выбирает все имена идентификаторов и улиц. –

+0

Он не указал, сколько записей он хочет выбрать, не так ли? Я сделал этот ответ, чтобы выбрать идентификатор и имя улицы, упорядоченное по счету. Если я не понял этот вопрос, прошу прощения. – OutOfSpaceHoneyBadger

0

Попробуйте

SELECT T1.id, T1.streetname FROM TableName T1 
INNER JOIN 
(
SELECT id, MAX(count) maxcnt FROM TableName 
GROUP BY id 
) T2 
ON T1.id= T2.id AND T1.count = T2.maxcnt 

SQL FIDDLE DEMO