2010-12-18 96 views
2

我的问题是关于左连接我试图计算有多少人正在跟踪某个项目。 (也可以是零个追随者)
SQL选择中的列的顺序很重要吗?

现在我可以得到它的工作的唯一途径是通过增加

group by idproject 

我的问题是,如果一种方法来避免使用此,只选择和隐式
设置该组选项。

SQL:

select `project_view`.`idproject` AS `idproject`, 
count(`track`.`iduser`) AS `c`,`name` 
from `project_view` left join `track` using(idproject) 

expected it count null为零,但它不会出现在所有,
如果我忽略计数则显示为空在那里没有追随者。

+2

您需要group by,以便聚合函数知道要计数的内容。选择顺序无关紧要。 – 2010-12-19 00:03:22

回答

3

如果你有一个WHERE子句来指定某个项目,那么你不需要需要一个GROUP BY。

SELECT project_view.idproject, COUNT(track.iduser) AS c, name 
FROM project_view 
LEFT JOIN track USING (idproject) 
WHERE idproject = 4 

如果你想为每个项目的计数,那么你需要一个GROUP BY。

SELECT project_view.idproject, COUNT(track.iduser) AS c, name 
FROM project_view 
LEFT JOIN track USING (idproject) 
GROUP BY idproject 
+0

这就是我所做的,我认为我可以在不明确使用“group by”的情况下完成类似的行为。现在我明白了它的问题 – shevski 2010-12-19 00:14:21

1

是的选择顺序。出于性能原因,您(通常)希望首先限制选择,以缩小数据集。这使得每个后续查询都在较小的数据集上运行。

+0

虽然这可能是真的,但它确实涉及到我的问题,无论如何感谢提示。 – shevski 2010-12-19 00:19:54