Распечатать название всех мероприятий без максимального или минимального количества участников - PullRequest
0 голосов
/ 31 октября 2019

Как я могу решить этот вопрос о хакерранке. Я совершенно сбит с толку, неспособный продвинуться с этим. enter image description here enter image description here

вот что я пробовал

 SELECT DISTINCT ACTIVITY FROM FRIENDS,
 SELECT max(ACTIVITY) AS M
 WHERE M = (SELECT NAME FROM Activities);

Ответы [ 3 ]

0 голосов
/ 31 октября 2019

Мне нравится решать подобные задачи с левым соединением и проверкой NULL:

SELECT 
    ACTIVITY,
    SUM(1) AS Total
INTO #ActivityCount 
FROM FRIENDS
GROUP BY ACTIVITY

SELECT
    ActivityCount.ACTIVITY
FROM #ActivityCount
    LEFT JOIN (SELECT MAX(ActivityCount.Total) AS Total FROM ActivityCount) AS MaxTotal
    ON ActivityCount.Total = MaxTotal.Total
    LEFT JOIN (SELECT MIN(ActivityCount.Total) AS Total FROM ActivityCount) AS MinTotal
    ON ActivityCount.Total = MinTotal.Total
WHERE
    MaxTotal.Total IS NULL
    AND MinTotal.Total IS NULL
0 голосов
/ 01 ноября 2019

Вот что я сделал

Select ACTIVITY from Friends 
group by ACTIVITY
having count(ACTIVITY) <> (select count1 from (select count(ACTIVITY) 
    count1 from Friends 
    group by (ACTIVITY) 
    order by count1 asc) 
    where rownum <= 1) and count(ACTIVITY) <> (select count2 from (select count(ACTIVITY) count2 from Friends group by (ACTIVITY) order by count2 desc) where rownum <= 1);
0 голосов
/ 31 октября 2019

Вы можете использовать window functions, если ваша версия mysql 8 или выше

select activity from (select activity, count(*) as cnt,
                             max(count(*)) over () as maximum_cnt,
                             min(count(*)) over () as minimum_cnt
                        from friends group by activity) mytable
where cnt not in (maximum_cnt, minimum_cnt);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...