2014-12-03 41 views
0

我一直在爲一個任務創建一個數據庫,並且我有一個需要實現的查詢。 查詢需要提供具有兩個以上更新修補程序的所有項目的項目標識。 和我使用的查詢:mySQL沒有給出它應該的結果

SELECT projectID 
FROM Transaction 
HAVING COUNT(Transaction.status = ‘patch’) > 2 

,但我發現projectID 1從這個eventhough唯一的項目有兩個以上的補丁是9

我使用的表:

CREATE TABLE Transaction 
( 
    transactionID SMALLINT NOT NULL, 
    ProjectID SMALLINT NOT NULL, 
    PRIMARY KEY(transactionID, projectID), 
    FOREIGN KEY(projectID) REFERENCES Project(projectID), 
    userID SMALLINT NOT NULL, 
    FOREIGN KEY(userID) REFERENCES Developer(userID), 
    date DATE NOT NULL, 
    status ENUM('upload','update','patch') NOT NULL 
); 

,這是我在我的表中的數據:

INSERT INTO Transaction 
(transactionID, projectID, userID, date, status) values 

(1,1,2,'2013-12-29','upload'), 
(2,7,8,'2014-05-12','update'), 
(3,9,20,'2013-07-15','patch'), 
(4,12,8,'2013-08-04','upload'), 
(5,10,26,'2014-11-06','update'), 
(6,9,26,'2013-07-04','patch'), 
(7,20,26,'2012-12-15','upload'), 
(8,13,14,'2013-02-16','update'), 
(9,12,8,'2014-07-11','patch'), 
(10,19,20,'2013-08-14','upload'), 
(11,19,20,2013-02-13,'update'), 
(12,14,20,'2013-11-10','patch'), 
(13,18,14,'2012-12-26','upload'), 
(14,1,2,'2014-07-14','update'), 
(15,12,8,'2013-04-11','patch'), 
(16,3,14,'2013-09-16','upload'), 
(17,4,20,'2013-09-02','update'), 
(18,9,20,'2014-09-18','patch'), 
(19,8,14,'2013-03-24','upload'), 
(20,17,8,'2014-10-20','update'); 

有沒有人有任何想法,爲什麼這不工作?

回答

1

您by子句

缺少組組由專案編號

SELECT projectID 
    FROM Transaction 
    where Transaction.status = 'patch' 
    group by projectid 
    HAVING COUNT(*) > 2 
+0

由於現在是有道理的,但有一點我不明白的是我的一個朋友有完全相同的查詢,並將其完美地工作對他來說很好 – Terakin 2014-12-03 19:05:17

+0

@Terakin,他們可能有分組的條款。但是,應用WHERE子句將僅處理基於該狀態的記錄,並且如果您在該列上有索引,則會更加優化。考慮有100萬條記錄,10個不同的狀態值導致平均100k記錄每個狀態。原始數據仍然會讓所有百萬人受到影響,但是where子句和一個索引只會衝擊100k條記錄。 – DRapp 2014-12-03 19:19:42