Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Яндекс практикум, помогите решить задание, выводит всё правильно но ему не нравиться.

Mihali444 Знаток (264), на голосовании 5 дней назад
(На 3-ем скрине, код из предыдущего задания)
Дополнен 1 месяц назад
Код:
import sqlite3

con = sqlite3.connect('db.sqlite')
cur = con.cursor()

results = cur.execute('''
SELECT ic.title, c.slug, ic.price
FROM ice_cream ic
JOIN categories c ON ic.category_id = c.id
WHERE ic.price IN (
SELECT MAX(price)
FROM ice_cream
GROUP BY category_id
)
ORDER BY ic.price DESC;
''')

for result in results:
print(result)

con.close()
Голосование за лучший ответ
Вячеслав Рожнев Профи (851) 1 месяц назад
Во первых условие не верно
 WHERE ic.price IN (  
SELECT MAX(price)
FROM ice_cream
GROUP BY category_id
)
Представьте если у вас есть экзотические мороженые по цене 1000р и 500р и обычные по цене 500р и 300р. Тогда в результат попадет экзотическое мороженое по 500р. хотя оно не самое дорогое в категории
Mihali444Знаток (264) 1 месяц назад
По-моему, у меня тоже самое написано
Mihali444 Знаток (264) Я понял, это вы просто кусок кода с ошибкой указали
Mihali444Знаток (264) 1 месяц назад
Здесь всё правильно, так как нужно найти самое дорогое мороженное для каждой категории, а не самое дорогое в базе
Вячеслав Рожнев Профи (851) Mihali444, вы не правы. Посмотрите пример: //sqlize.online/s/r9
step Мастер (1348) 1 месяц назад
не самое оптимальное по времени, но:
SELECT ic.title, c.slug, ic.price
FROM ice_cream ic
JOIN categories c ON ic.category_id = c.id
JOIN (SELECT MAX(price), id
FROM ice_cream
GROUP BY category_id
) t ON t.id = ic.id
ORDER BY ic.price DESC;


попробуй
Похожие вопросы