2014-12-17 3 views
0

에 나는 데이터베이스에있는 모든 이벤트에서 각 공연에 대한 행이 있습니다이MySQL의 GROUP BY 특정 행

id, eventid, event       , venue , performer  , popular, image 
2, 5895 , Garth Brooks and Trisha Yearwood, TD Garden, Trisha Yearwood, n  , empty 
1, 5895 , Garth Brooks and Trisha Yearwood, TD Garden, Garth Brooks , y  , garth.jpg 

처럼 많이 설정되어있는 MySQL의 테이블이 있습니다. 내가해야 할 일은 SELECT * FROM events_table WHERE venue = 'TD Garden'이지만 이벤트 ID로 그룹화해야합니다. 그렇지 않으면 동일한 이벤트의 여러 행이 표시됩니다.

문제는 내가 popular> y 인 행에 우선 순위를 매기도록해야한다는 것입니다. 그렇지 않으면 Trisha Yearwood가 나타나서 그녀를위한 사진이 없습니다. 그 이유는 내가 인기있는 모든 것을 선택하지 않는 이유는 어떤 이벤트에는 인기있는 아티스트가 없기 때문에 TD 가든에서 모든 이벤트가 필요하기 때문입니다.

SQL에 대해 가능한 질문은 무엇입니까? 미안하지만 내 질문이 너무 혼란 스럽다면.

+2

임의의 값으로 그룹화 할 수 있습니다. 'popular, 'y', other, fields, here '로 그룹화하십시오. –

+0

대표적인 데이터 세트 (이상적으로는 DDL 세트)와 원하는 결과 세트를 제공하는 것이 좋습니다. – Strawberry

+0

나는 당신의 모범을 이해하고 있는지 확신하지 못합니다. trisha yearwood에 대해 garth의 이미지를 표시하고 싶습니까? 또는 그는 인기가 많기 때문에 Garth 만 열거하고 싶습니까? 하나 이상의 인기가 있다면 어떨까요? – xQbert

답변

0

하위 쿼리는 각 이벤트 (>'n''y')의 최대 인기를 선택합니다 .... 또한, 표시 할 것을 이름 그냥 인기를 모르거나 두 연주자의 나열한다 아티스트는 자신이 수행하는 이벤트에서 최대 인기를 얻지 못합니다.

select * 
from events_table 
where 
    venue = 'TD Garden' and 
    (eventid,popular) in (
     select 
      eventid, 
      max(popular) 
     from events_table 
     group by eventid 
    ) 
group by eventid 
0

내가 당신을 잘 받았다면, 당신은 다음, 그것은 인기가있다, 또는 전혀 인기있는 이벤트가 없습니다 모든 이벤트에 따라 선택 할 당신에 의해 어떤 그룹

Select [columns here] From 
    (Select [columns here] From events_table ET where venue='your_venue_here' and 
     (popular='y' or not exists 
      (Select * From events_table where popular='y' and eventid=ET.eventid)) T 
group by eventid 
0
SELECT ET.ID, ET.Event_ID, ET.Event, ET.Venue, Coalesce(ET2.Performer, ET.Performer) as Performer Coalesce(ET2.Popular, ET.Popular) as Popular, Coalesce(ET2.Image, ET.Image) as Image 
FROM events_table ET 
LEFT JOIN Events_table ET2 
on ET.Event_ID = ET2.Event_ID 
and ET2.Popular='Y' 
WHERE venue = 'TD' 

이 싶습니다 수 있습니다 당신이 쫓아 왔던 것일지도 모르지만 여러 대중적인 사람들을 잘 대하지 않습니다. 조건 (eventid,popular) in (...)가 행을 제거하므로,