$ 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?这是一个简短的例子,但是我的代码没有得到预期的结果。查询是否符合我要完成的任务?
答案 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
…