У меня есть таблица 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'
, но мне нужно сгруппировать их по идентификатору события, иначе появятся несколько строк одного и того же события.
Проблема в том, что мне нужно как-то сгруппировать их с приоритетом в строках, где popular = y. Иначе могла бы появиться Триша Йервуд, и у нее не было бы фото. Причина, по которой я не выбираю просто все, где популярно = y, заключается в том, что на некоторых мероприятиях может не быть с самого начала каких-либо популярных артистов, и мне понадобятся все мероприятия в TD Garden, а не только популярные.
Возможно ли то, что я прошу, с SQL? Извините, если мой вопрос слишком запутанный.
3 ответа
Подзапрос выбирает максимальную популярность каждого мероприятия ('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
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'
Это может быть то, что вам нужно, но это не очень хорошо для нескольких популярных людей. Я также не знаю, какие имена вы хотите отобразить, только популярное имя или должны быть указаны оба исполнителя ....
Если у меня все хорошо, вы можете выбрать на основе всех событий, где он популярен, или вообще не имеет популярных событий, а затем выберите любую группу, которую хотите
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
Похожие вопросы
Новые вопросы
php
PHP — это широко используемый язык сценариев общего назначения с открытым исходным кодом, мультипарадигмальный, динамически типизированный и интерпретируемый, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.
group by popular = 'y', other,fields,here