2011-09-18 68 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 
…