Существует несколько уровней отладки, которые вам могут понадобиться, но самый простой - добавить переменную среды ANSIBLE_STRATEGY=debug
, которая позволит отладчику при первой ошибке.
Я понимаю, что ваш вопрос заключается в том, что вы хотите получить порядок рейтинговых данных с подробностями города:
select b.city,b.country,a.region,a.rating from
(SELECT max(c.id) as city_id,
c.region,
max(n.rating) as rating from cities c
JOIN nightlife n
ON n.cityID = c.id
WHERE c.popular = true
group by c.region
ORDER BY n.rating
DESC) a inner join cities b on a.city_id=b.id;
SELECT n.id
, n.city
, n.country
, n.region
, n.popular
, n.rating
FROM
( SELECT a.*
, CASE WHEN @prev = region THEN @i:=@i+1 ELSE @i:=1 END i
, @prev:=region prev
FROM
( SELECT c.*
, n.rating
FROM cities c
JOIN nightlife n
ON n.cityid = c.id
ORDER
BY region
, rating DESC
) a
JOIN ( SELECT @prev:=null,@i:=0) vars
) n
WHERE n.i <= 2;
+------+-----------+---------+--------+---------+--------+
| id | city | country | region | popular | rating |
+------+-----------+---------+--------+---------+--------+
| 23 | shanghai | spain | asia | 1 | 9.5 |
| 54 | tokyo | japan | asia | 1 | 9.3 |
| 1 | barcelona | spain | europe | 1 | 10 |
| 5 | paris | france | europe | 1 | 9 |
+------+-----------+---------+--------+---------+--------+
Вы можете попытаться использовать оператор UNION
, чтобы получить ПЕРВЫЙ и ВТОРОЙ лучшие города в регионе. Чтобы получить второе по величине значение, я использую этот SO ответ
SELECT C.region, C.city, C.id, MAX(N.rating) as rating
FROM cities C
INNER JOIN nightlife N
ON C.ID = N.cityID
GROUP BY C.region
UNION
SELECT C.region, C.city, C.id, MAX(N.rating) as rating
FROM cities C
INNER JOIN nightlife N
ON C.ID = N.cityID
WHERE N.rating < (SELECT MAX(rating)
FROM nightlife
INNER JOIN cities
ON cities.ID = nightlife.cityID
WHERE region = c.region)
GROUP BY C.region
ORDER BY region,rating desc,city
Это рабочее решение Fiddle