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

相关问题