2011-09-18 2 views
1

$ 구문 = "SELECT * FROM mytable GROUP BY nid가 nid> 1";마이 SQL 그룹 도움말 by

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을 제외하고 GROUP BY nid입니까? 이것은 간단한 예제이지만 내 코드로 나는 원하는 결과를 얻지 못하고있다. 성취하고자하는 일에 대한 질문이 맞습니까? 이것에 대해

답변

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

내가 꾸벅 꾸벅 = 1의 결과를 필요로하지만 난이 그룹에 다른 매칭 꾸벅 꾸벅의 – 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; 

확실하지

오라클이나 MySQL을 사용하는 경우.

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