2014-03-31 43 views
0

加入COUNT(*)列與另一列我有這樣如何在MySQL

第一個表的表是「約會」表「doctor_id」的第二個表是「醫生」表也與'doctor_id'。約會表中的重複值代表每位醫生有多少次約會。例如doctor_id(50)有6個約會。

doctor_id(Appointments) | doctor_id(Doctors) 
      50    |   50 
      50    |   51 
      50    |   52 
      52    |   53 
      50    | 
      50    | 
      52    | 
      53    | 
      50    | 

現在,我的問題是如何將顯示該表下方的(PS不包括醫生ID '51)

doctor_id (Doctors) | Count 
     50   | 6 
     52   | 2 
     53   | 1 

這是我曾嘗試到目前爲止,我已成功地解決如何很多醫生有預約 使用:

SELECT COUNT(*) FROM appointment 
WHERE doctor_id > 50 

我已經執行其他查詢,以及,但沒有運氣。

+0

可能重複[?我如何查詢表給使用SQL的ID的實例數(http://stackoverflow.com/questions/22768988/how-do-i-query-a-table-to-the-number-of-an-instance-of-an-id-using-sql) – spencer7593

回答

0

假設doctor_id分組醫生約會是在doctors表中是唯一...

SELECT d.doctor_id  AS doctor_id 
    , COUNT(a.doctor_id) AS appointment_count 
    FROM doctors d 
    LEFT 
    JOIN appointments a 
    ON a.doctor_id = d.doctor_id 
GROUP BY d.doctor_id 

通過doctor_id得到計數,你需要GROUP BY的doctor_id。您不必包括在SELECT列表doctor_id,但如果你只返回COUNT(),你只得到計數的列表:

appointment_count 
----------------- 
       6 
       0 
       2 
       1 

由於沒有指出哪個appointment_count與哪個doctor_id。所以,通常的模式是在SELECT列表中包含GROUP BY。

爲了返回醫生51的0計數,我們想要一個外部連接到約會表,所以即使沒有匹配,醫生表中的行也會被返回。


如果只想對具有一個或多個預約醫生行,那麼你可以查詢 約會表。 (此查詢將不會爲醫生返回任何「零」計數)。

SELECT a.doctor_id 
    , COUNT(1) AS appointment_count 
    JOIN appointments a 
GROUP BY a.doctor_id 

再次,GROUP BY條款是必要得到行數爲doctor_id的每個不同的值。這有效地將每個doctor_id的行摺疊爲一行。聚合函數在「組」行上操作。

+0

@ user3360335:我的答案中的第一個查詢返回錯誤結果爲零計數,因爲它使用的是COUNT(1)而不是COUNT(a.doctor_id)。當原始查詢返回0時,它將返回1.這已得到糾正。 – spencer7593

1
SELECT d.doctor_id, COUNT(a.doctor_id) FROM doctors d 
Join appointment a 
d.doctor_id =a.doctor_id 
WHERE d.doctor_id > 50 
GROUP BY a.doctor_id 

試試這個代碼,並希望這個工程。我對ID

+0

感謝您的評論。我沒有注意到問題 –

+0

+1中的醫生51:不清楚OP是否需要零計數;原始表單對查詢表的查詢會給出非零計數就好了。 – spencer7593

1

您可以使用組通過doctor_id用於計算每個doctor_id多少次重演:

SELECT doctor_id,COUNT(doctor_id) FROM appointment GROUP BY doctor_id

+0

這不會爲doctor_id = 51返回一個零計數。爲了達到這個目的,我們需要doctor表作爲約會表的左外連接的驅動表。 – spencer7593

+0

耶!我沒有注意到。謝謝 ! – thandav63

+0

+1:目前還不清楚OP是否需要零計數;如果要排除零計數,此查詢將返回指定的結果。 – spencer7593

0

由於只使用預約表中可以做到這一點的問題的信息:

SELECT appointments.doctor_id, Count(appointments.doctor_id) 
    FROM appointments 
    GROUP BY appointments.doctor_id; 

但是,作爲具體詢問JOIN的問題,以下代碼將起作用:

SELECT d.doctor_id, COUNT(a.doctor_id) AS appointment_count 
    FROM doctors d 
    JOIN appointments a 
    ON a.doctor_id = d.doctor_id 
    GROUP BY d.doctor_id; 

工作示例,請SQLFiddle:SQLFiddle