2017-04-21 41 views
0

我试图计算2009年各州出售的自行车数量。这是来自RollingThunder数据库。这里是我的代码:COUNT()函数不返回符合指定条件的行数

SELECT 
    Bicycle.OrderDate, 
    States.StateName 
FROM 
    Bicycle, 
    States 
WHERE 
    Bicycle.OrderDate = '2009' 

SELECT COUNT(Bicycle.OrderDate) FROM Bicycle; 

然而,我的结果是一个长长的名单,这是不给我了许多自行车。我究竟做错了什么?

回答

0

我相信你的代码应该是这样的:

SELECT COUNT(Bicycle.OrderDate) FROM Bicycle WHERE Bicycle.OrderDate = '2009' GROUP BY Bicycle.OrderDate 
2

我在这里的一些列名的猜测(这似乎有点奇怪,令是在一个名为自行车表),但它会是这样的:

SELECT 
    States.StateName, 
    Count(1) AS Cnt 
FROM Bicycle 
LEFT JOIN States 
ON Bicycle.StateCode = States.StateCode 
WHERE Year(Bicycle.OrderDate) = 2009 
GROUP BY States.StateName 
ORDER BY States.StateName 
+0

我得到了一个错误说“无效列名称'StateCode'。 –

+0

@CABurns是的,我不知道你的列是真正命名的。该方法是加入状态表并按州名分组并进行计数。 – JBrooks

0

据我所知,你想要什么作为最终输出是每个州销售的自行车的数量,在2009年

试试这个(假设订购日期为DATE的型),

SELECT DISTINCT(S.StateName),COUNT(B.OrderDate) 
FROM Bicycle B,States S 
WHERE B.OrderDate>='2009/01/01' and B.OrderDate<='2009/12/31' and S.<columnName>=B.<columnName> 
GROUP BY S.StateName 

注:指定它连接两个表,即外键(S.<columnName>=B.<columnName>)列名,否则您将无法获得所需的输出