2013-08-06 41 views
-1

我想根據條件選擇數據:我有一張表physician_key和給定月份的相應質量分數。我想選擇質量得分爲1,2的不同醫師的數量。 對於一個月,醫生密鑰可能會有更多條目,因此分配的質量(按比例1-7)。我只想選擇那些有質量的醫生的數量(1,2),如果同一個醫生在給定的月份中質量> 2,我不想指望那位醫生。我希望按產品和月份的信息如何在MySql查詢中處理這個問題?

+0

歡迎來到SO。如果你做了幾件事情,你會得到更好的幫助:首先,將你的問題標題改爲描述性的。 (幾乎所有東西都歸結爲「如何做到這一點?」)其次,如果沒有表格模式的描述,這個問題很難回答。 – eaj

回答

0

試試這個:

SELECT count(DISTINCT physician_key) 
    FROM my_table 
    WHERE month = desired_month 
    AND max(quality) = 2 
GROUP BY month 
+0

即使同一位醫生有一次質量得分爲1或2,他仍然會選擇計數,但是他可能在另一天得到高分,如果這種情況我不想'選擇他' – user2542275

+0

我編輯了'SELECT '這樣它現在只考慮醫生已經達到了最多2. – Nerius

+0

謝謝,我會嘗試 – user2542275

1

我創建了一個示例表,因爲你沒有提供一個:

mysql> select * from sales_mkt_rep_qual; 
+-------------------+---------+-------+-------------------+ 
| GEO_PHYSICIAN_KEY | product | month | SALES_REP_QUALITY | 
+-------------------+---------+-------+-------------------+ 
|     1 | a  |  8 |     1 | 
|     1 | a  |  8 |     2 | 
|     1 | a  |  8 |     3 | 
|     2 | b  |  8 |     2 | 
|     2 | b  |  8 |     1 | 
|     2 | b  |  9 |     2 | 
|     1 | a  |  9 |     2 | 
|     2 | b  |  9 |     3 | 
|     3 | a  |  9 |     2 | 
+-------------------+---------+-------+-------------------+ 

從您的評論的查詢的確給出了一個錯誤:

SELECT COUNT(DISTINCT GEO_PHYSICIAN_KEY) AS encount_1to2, 
     product,MONTH 
FROM sales_mkt_rep_qual 
WHERE MAX(SALES_REP_QUALITY) = 2 ; 

ERROR 1111 (HY000): Invalid use of group function 

如果更改到:

SELECT DISTINCT geo_physician_key AS encount_1to2, product, month 
FROM sales_mkt_rep_qual 
WHERE (geo_physician_key,month,product) 
    NOT IN (
     SELECT geo_physician_key, month, product 
     FROM sales_mkt_rep_qual 
     WHERE sales_rep_quality >2 ); 

你看到詳細結果:

+--------------+---------+-------+ 
| encount_1to2 | product | month | 
+--------------+---------+-------+ 
|   2 | b  |  8 | 
|   1 | a  |  9 | 
|   3 | a  |  9 | 
+--------------+---------+-------+ 

不,你可以介紹計數:

SELECT COUNT(distinct geo_physician_key) AS no_of_physicians,product, month 
FROM sales_mkt_rep_qual 
WHERE (geo_physician_key,month,product) 
     NOT IN (
     SELECT geo_physician_key, month, product 
     FROM sales_mkt_rep_qual WHERE sales_rep_quality >2 ) 
GROUP BY month, product; 

+------------------+---------+-------+ 
| no_of_physicians | product | month | 
+------------------+---------+-------+ 
|    1 | b  |  8 | 
|    2 | a  |  9 | 
+------------------+---------+-------+ 

如果仍然不你在找什麼,給出更具體的表格結構和數據的例子。

+0

實際上我想要的數據像 + -------------- + --------- + ----- - + | encount_1to2 |產品|月| + -------------- + --------- + ------- + | 2 | b | 8 | + -------------- + --------- + ------- + 和條件SALES_REP_QUALITY <= 2,不存在在選擇不同的地理醫生密鑰的同時,可能會選擇第2個,因爲它符合標準?這就是爲什麼我使用了最大功能的Thanix方法,並在一個月內對每個產品都應用了聚合函數 – user2542275

+0

希望它現在能夠工作 - 更改了我的答案。 – KlusterGuy

+0

實際上,用不同的用戶名再次提出問題是不好的形式。 – KlusterGuy

0

事實上,我希望數據是像下面的輸出:

+--------------+---------+-------+ 
| encount_1to2 | product | MONTH | 
+--------------+---------+-------+ 
|   2 | b  |  8 | 
+--------------+---------+-------+ 

和用於標準SALES_REP_QUALITY < = 2,不存在一種可能性,即在選擇的不同地理醫師關鍵,它可能選擇考慮到它符合標準,從第2個開始?這就是我使用最大功能的Thanix方法的原因,以便在一個月內對每個產品應用聚合函數。