SQL top + count () путаница - PullRequest
       5

SQL top + count () путаница

0 голосов
/ 29 марта 2010

У меня есть следующая таблица:
пациенты
ID
Имя
диагноз_ид

Что мне нужно сделать, так это получить всех пациентов с наиболее популярным диагнозом N.
И я ничего не получаю, используя этот запрос:
SELECT name FROM patients<br> WHERE diagnosis_id IN<br> (SELECT TOP(5) COUNT(diagnosis_id) FROM patients<br> GROUP BY diagnosis_id<br> ORDER BY diagnosis_id)
Как это исправить?

Ответы [ 4 ]

3 голосов
/ 29 марта 2010
SELECT name FROM patients
WHERE diagnosis_id IN
(
SELECT TOP(5) diagnosis_id FROM patients
GROUP BY diagnosis_id
ORDER BY COUNT(diagnosis_id) desc
)
1 голос
/ 29 марта 2010

Несколько вещей не так с этим:

Во-первых, я бы рекомендовал использовать общее табличное выражение для поиска "топ-5", а не подзапрос - для меня это делает его немного понятнее, и хотя здесь это не имеет значения в реальных условиях работы он, скорее всего, будет лучше.

Основная проблема заключается в том, что вы просматриваете топ-5 по идентификатору диагноза, а не по количеству. Вместо этого вам нужно будет сделать ORDER BY COUNT(diagnosis_id).

0 голосов
/ 29 марта 2010

попробуйте это:

SELECT name FROM patients
WHERE diagnosis_id IN
(SELECT TOP(5) diagnosis_id FROM patients
GROUP BY diagnosis_id
ORDER BY COUNT(diagnosis_id))
0 голосов
/ 29 марта 2010
select p.name from patients p
inner join (
    select top 5 diagnosis_id, count(*) as diagnosis_count
    from patients
    group by diagnosis_id
    order by diagnosis_count) t on t.diagnosis_id = p.diagnosis_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...