그룹

2013-01-18 2 views
1

가 여기 내 쿼리 나 쿼리에서 group by p.id를 사용할 때 나는이 결과그룹

shoe a2.jpg 0 
elbs r3.jpg 1 

에게 원하는

id | name | img | nu 
25 | shoe | a1.jpg | 1 
25 | shoe | a2.jpg | 0 
26 | elbs | r3.jpg | 1 

, 그것은 출력 a1.jpg.
min("nu") 열 값으로 주문하고 싶습니다.

당신은 min(nu) 값을 얻을 수있는 하위 쿼리를 사용하고 올바른 이미지를 반환하고 있는지 확인하기 위해 p_image 테이블이 다시 가입 할 수 있습니다
+0

당신이 당신의 테이블 구조를 추가 할 수 있습니까? 나는 그것이 제품 (ID, 이름), p_images (img, product)라고 생각하지만, nu는 무엇입니까? – Ilion

답변

1

시도 :

SELECT * 
FROM products p 
LEFT JOIN p_images r ON (r.product=p.id) 
WHERE r.nu = (SELECT MIN(nu) FROM p_images m WHERE m.product = p.id) 
ORDER BY nu 
+2

이 쿼리에서 최소 값순으로 누락되었습니다. – Taryn

+0

MIN (nu)가 하위 쿼리 – neeraj

+0

에 추가 된 이유는 무엇입니까?하지만 그런 식으로 결과를 가져 오는 방법이 마음에 들었습니다. – neeraj

2

:

select p.id, 
    p.name, 
    i.img, 
    r.minnu 
from products p 
left join 
(
    select min(nu) MinNu, product 
    from p_images 
    group by product 
) r 
    on p.id=r.product 
left join p_images i 
    on r.minnu = i.nu 
    and r.product = i.product 
order by i.nu; 

참조 SQL Fiddle with Demo

결과 :

| ID | NAME | IMG | MINNU | 
------------------------------ 
| 25 | shoe | a2.jpg |  0 | 
| 26 | elbs | r3.jpg |  1 | 

그 값인 ORDER BY을 추가하기 만하면됩니다. order by 절을 사용하고 있으므로 별칭을 사용하거나 집계를 배치 할 수 있습니다. 별명으로

주문 :

제품 P FROM

SELECT p.id, p.name, r.img, 분 (r.nu) MinNu 가 p_images가 p.id에 r에 가입 왼쪽 = 집계에 의해 MinNu

주문에 의해 p.id 순서로 그룹을 r.product :

SELECT p.id, p.name,제품 0 r.img, 분 (r.nu) MinNu 는 P 최소 (r.nu)로 p.id ORDER BY r.product 기를 = p_images가 p.id에 r에 가입 왼쪽; |

:

참조 SQL 모두의 Fiddle with Demo는 결과가

를 조회 ID | NAME | IMG | 민북 | ------------------------------ | 25 | 신발 | a1.jpg | 0 | | 26 | 엘프 | r3.jpg | 1 |

+0

잘 모르겠지만 OP의 예상 결과는 이전 쿼리에서 그 부분을 놓친 경우에도 '25, a2.jpg, 0'으로 표시됩니다. 그래서 나는 다른 것을 했어. 당신은 OP 질문에 오타라고 생각하니 :) – bonCodigo

+0

@bonCodigo 나는 실제로 그것을 놓쳤다. 올바른 결과를 반환하도록 내 대답을 업데이트했습니다. – Taryn

+0

감사합니다 - 굉장합니다! –

1

이 당신이 필요로하는 무엇인가? 내가 테이블에 당신의 이전에 생성 한 결과를 가져 갔다대로, 틀린 여기에서.:)

SQLFIDDLE DEMO

select id, name, img, 
min(nu) 
from t1 
group by id 
; 

그래서 나뿐만 아니라 그 다음에 따라 답변을 줄 수 있습니다


select x.id, x.name, x.img, min(x.nu) 
from( 
SELECT p.,r. FROM products p 
left join p_images r 
on (p.id=r.product)) x 
group by x.id 
order by x.nu 

| ID | NAME | IMG | MIN(NU) | 
-------------------------------- 
| 26 | elbs | r3.jpg |  1 | 
| 25 | shoe | a1.jpg |  0 | 
이 당신의 예상 결과는 r2.jpg and 0을 말한다을, 그래서 나는이 무엇을 생각 당신은 정말로 필요할 것입니다. 이번에는 SQL 피들을위한 @bluefeet 덕분에 올바른 테이블을 사용했습니다.

SQLFIDDLE DEMO

select p.id, p.name, x.img, x.mn 
from products p 
left join (select i.product, i.img, 
      min(i.nu) mn 
      from p_images i 
      group by i.nu, i.product) 
x on p.id = x.product 
group by x.product 
order by x.mn 
; 

| ID | NAME | IMG | MN | 
--------------------------- 
| 25 | shoe | a2.jpg | 0 | 
| 26 | elbs | r3.jpg | 1 | 
+0

@Halis 예상 한 결과가 두 번 나타났습니다. 'a2.jpg 0' ..'25 '가 필요해 보입니다.이 부분을 확인해주세요 :) – bonCodigo