вопрос sql - PullRequest
       8

вопрос sql

1 голос
/ 29 мая 2010

Эй, ребята, просто немного затрудняюсь с запросом, я пытаюсь выяснить, как показать самый популярный натуропат, которого посетили в центре. Мои таблицы выглядят следующим образом:

Patient(patientId, name, gender, DoB, address, state,postcode, homePhone, businessPhone, maritalStatus, occupation, duration,unit, race, registrationDate , GPNo, NaturopathNo)

и

Naturopath (NaturopathNo, name, contactNo, officeStartTime, officeEndTime, emailAddress)

Теперь, чтобы запросить это, я придумала

SELECT count(*), naturopathno FROM dbf10.patient WHERE naturopathno != 'NULL' GROUP BY naturopathno;

, что приводит к;

  COUNT(*) NATUROPATH
     2 NP5
     1 NP6
     3 NP2
     1 NP1
     2 NP3
     1 NP7
     2 NP8

Мой вопрос: как мне выбрать самый высокий счет из этого списка и напечатать это значение с именем натуропата? Любые предложения приветствуются,

Ответы [ 3 ]

2 голосов
/ 29 мая 2010

В MySQL вы можете выбрать верхнюю строку как:

select *
from Naturopath n
join (
    SELECT count(*) as cnt, naturopathno 
    FROM dbf10.patient 
    WHERE naturopathno != 'NULL' 
    GROUP BY naturopathno;
) pat ON pat.naturopathno = n.naturopathno
ORDER BY pat.cnt DESC
LIMIT 1

Кстати, если вы проверяете null вместо строки "NULL", попробуйте:

where naturopathno is not null
1 голос
/ 29 мая 2010

Вы можете использовать аналитическую функцию RANK - она ​​присвоит ранг "1" самому верхнему натуропату или натуропатам, если есть связь с первым местом:

SELECT (select name from Naturopath n
        where n.NaturopathNo = q.naturopathno)
       as TopNaturopathName,
      ,q.patients
FROM (
 SELECT naturopathno, patients,
        RANK() OVER (ORDER BY patients DESC) rnk
 FROM (
  SELECT COUNT(*) AS patients, naturopathno
  FROM dbf10.patient
  WHERE naturopathno is not null
  GROUP BY naturopathno
 )
) q
WHERE rnk = 1;
0 голосов
/ 29 мая 2010

хорошо, разобрался, спасибо, ребята, у меня есть это, которое делает работу, вероятно, не очень эффективно, но делает это:)

SELECT *
FROM (
SELECT COUNT(*) AS patients, naturopathno
FROM dbf10.patient
WHERE naturopathno is not null
GROUP BY naturopathno
ORDER BY patients DESC)
WHERE ROWNUM = 1;

есть ли лучшие способы сделать это?

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