查找每个GROUP BY结果中的行数

时间:2012-02-07 21:32:45

标签: sql database group-by

我有一个数据库,告诉每个系统当前和新模型。 (每行都有一个系统名称,当前模型和新模型)我需要按当前模型和新模型对结果进行分组。因此,如果当前和新模型相同,我想要一个结果。我得到了它的工作,但我还需要知道每组有多少系统。我怎样才能做到这一点?我正在使用CI

这是我的查询

$query2 = $this->db->query('SELECT * FROM rollout_systems WHERE scope_ID = '.$id.'  GROUP BY EAM_Model, new_Model');

(EAM_Model =当前模型)

不知道我是否澄清了。我需要能够显示当前系统,新系统以及该组中的系统数量。

所以如果3行有“blah”作为当前系统和“blahblah”作为新系统,我希望它说 目前:布拉赫 新:Blah Blah 系统数量:3

3 个答案:

答案 0 :(得分:2)

在同一语句中执行select *和group by是没有意义的。您分组的列需要在您的选择中,但是您应该在select中有一个聚合函数,如count(*)。我不确定我完全理解你想要做什么,但我认为你想要的是:

SELECT EAM_Model, new_Model, count(*)
FROM rollout_systems 
WHERE scope_ID = '.$id.'              
GROUP BY EAM_Model, new_Model

答案 1 :(得分:0)

如果您只想要项目数,请使用SELECT EAM_Model, new_Model, COUNT(*) FROM ...等。当您对查询进行分组时,您通常希望执行COUNT或SUM之类的聚合,否则它无法生成感觉是对数据进行分组。

答案 2 :(得分:0)

$ query2 = $ this-&gt; db-&gt; query('SELECT count(*) FROM rollout_systems WHERE scope_ID ='。$ id。'GROUP BY EAM_Model,new_Model'); < / p>

这是你要求的吗?