2011-09-18 69 views
1

$ construct =“SELECT * FROM mytable GROUP BY nid HAVING nid> 1”;Mysql Group by clause帮助

mytable: 
+----+----------+ 
| id | nid | 
+----+----------+ 
| 1 |  null | 
| 2 |  1 | 
| 3 |  1 | 
| 4 |  1 | 
| 5 |  2 | 
| 6 |  2 | 
| 7 |  3 | 
| 8 |  3 | 
| 9 |  4 | 
| 10 |  4 | 
----------------- 

我如何GROUP BY NID除了NID = 1?这是一个简单的例子,但我的代码,我没有得到预期的结果。查询是否正确,我正在努力完成什么?

回答

1

如何:

SELECT * FROM mytable WHERE nid != 1 ORDER BY nid 

GROUP BY导致查询您只能理智与聚合函数使用。例如,SELECT COUNT(*), nid GROUP BY nid会为您提供给定nid的行数。

更新:不知道我理解你,但再怎么样:

(SELECT * FROM mytable WHERE nid = 1 UNION SELECT * FROM mytable WHERE nid != 1 GROUP BY nid) ORDER BY nid 

我不知道它是有道理的混合聚集和非聚集查询,虽然 - 上总的来说,您最终会得到该组的不确定代表性的一行。

+0

,我需要的nid = 1分的结果,但我想组的其他配套NID的 – user892134

+0

@user:它并没有真正意义的“按组”在一定范围内但不超过另一个,因为一个查询是一个聚合和一个不是。有两个单独的查询不是更合适吗?也许更详细地描述你的目标(最简单的例子)。 –

+0

一个查询不可能吗?也许连接查询? – user892134

1
SELECT count(*), nid FROM mytable where nid <> 1 GROUP BY nid; 

SELECT count(*), nid FROM mytable where nid != 1 GROUP BY nid; 

不知道,如果你使用的是Oracle或MySQL。

0
… 
GROUP BY CASE nid WHEN 1 THEN -id ELSE nid END 
…