Mysql Group by子句帮助

时间:2011-09-18 21:30:26

标签: mysql group-by

$ construct =“SELECT * FROM mytable GROUP BY nid HIDING nid> 1”;

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

除了nid = 1之外,我如何分组BY?这是一个简短的例子,但是我的代码没有得到预期的结果。查询是否符合我要完成的任务?

3 个答案:

答案 0 :(得分: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

我不确定混合聚合查询和非聚合查询是否有意义 - 但在聚合方面,您最终会得到该组的不确定代表行。

答案 1 :(得分: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。

答案 2 :(得分:0)

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