2017-12-11 4 views
1

SQLの質問に問題があります。 私は2つのテーブルを持っています:個人と患者の治療。 個人テーブルには個人情報があり、治療テーブルには治療を受けた個人IDと患者IDがあります。 私は多くの治療法を与えた個人がの異なるの患者を見つける必要があります。 私は次のことを試してみました:SQLでユニークな値を計算する

SELECT ID , First_Name , Last_Name 
    FROM Personal JOIN Patients_Treatments ON ID = Personal_id 
    GROUP BY ID , First_Name , Last_Name 
    HAVING COUNT(*) >= ALL (SELECT COUNT(Personal_id) FROM Patients_Treatments 
    GROUP BY Personal_id) 

問題は、それが最もトリートメント、別の患者に最も治療を与えないものを与えた個人を与えることです。 ありがとうございました!

EDIT:

SELECT Personal.ID,First_Name,Last_Name 
FROM Personal,Patients_Treatments 
WHERE Personal.id = Patients_Treatments.Personal_id 
GROUP BY Personal.ID,First_Name,Last_Name 
HAVING COUNT(distinct Patient_ID) >= all(SELECT COUNT(distinct Patient_ID) 
FROM [Patients_Treatments] GROUP BY Personal_id) 
+0

soooo、mysqlまたはSQL Server? – Lamak

+0

SQL Server – Guy

答えて

2

これは最高の治療と(S)個人を返します。 は、誰もが興味を持っている場合は解決策を見つけました。

SELECT TOP 1 WITH TIES ID , First_Name , Last_Name 
FROM Personal JOIN Patients_Treatments ON ID = Personal_id 
GROUP BY ID , First_Name , Last_Name 
ORDER BY COUNT(DISTINCT Patient_ID) DESC 
+0

私はあなたをアップフォートしましたが、 'COUNT(DISTINCT Personal_Id)DESC'の' COUNT(DISTINCT Personal_id) 'を変更する必要があります – Lamak

+0

@Lamak gotcha :) –

+0

うまくいきません。あなたはDISTINCTで何回個人IDが出現したのかを数えました。私は解決策を見つけましたが、努力に感謝しています:) – Guy