MySQL GROUP BY优先于某些行

时间:2014-12-17 16:21:10

标签: php mysql

我有一个像这样设置的MySQL表

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

数据库中每个事件的每个执行者都有一行。我需要做的是SELECT * FROM events_table WHERE venue = 'TD Garden',但我需要按事件ID对它们进行分组,否则会显示同一事件的多行。

问题是我需要以某种方式将它们优先分配给受欢迎= y的行。否则Trisha Yearwood可能会出现,并且没有她的照片。我之所以不选择流行的所有东西是因为某些活动可能没有任何受欢迎的艺术家,我需要TD Garden的所有活动而不仅仅是受欢迎的活动。

我问SQL可能吗?对不起,如果我的问题太混乱了。

3 个答案:

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

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

这可能是您所追求的,但它并不能很好地处理多个受欢迎的人。我也不知道你想要展示什么名字,只是受欢迎的名字,或者两个表演者都应该被列出....

答案 2 :(得分:0)

子查询选择每个事件的最大受欢迎程度('y'> 'n'),因此条件(eventid,popular) in (...)会删除艺术家在他/她执行的事件中没有最大受欢迎程度的行。

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