Я пытаюсь написать запрос в Peewee с базой данных MySQL, чтобы вернуть верхнюю product
, экспортируемую каждым state
, на основе суммы export_value
s для данной пары продукта-состояния.Мне интересно, какой будет наиболее оптимальный SQL-запрос для достижения этой цели.Вот схема таблицы, которая мне нужна:
Trade
- product (varchar)
- state (varchar)
- export_value (numeric)
...
Поля, которые мне нужно выбрать: state
, product
и total_export_value
.
Любое руководство о том, какразработать этот запрос?Если возможно, также о том, как перевести его в Peewee (я очень новичок в этом).
РЕДАКТИРОВАТЬ:
Вот запрос Peewee, который я пробовал:
subquery = (
models.Trade.select(
models.Trade.state.alias("state_1"),
models.Trade.product.alias("product_1"),
fn.SUM(models.Trade.export_value).alias("export_value_1")
).where(
models.Trade.origin_country == origin_country,
models.Trade.year == args["year"]
).group_by(
models.Trade.state,
models.Trade.product
).alias("subquery")
)
query = (
models.Trade.select(
models.Trade.state,
models.Trade.product,
fn.MAX(subquery.c.export_value_1).alias("export_value")
).join(
subquery, on=(
(models.Trade.state == subquery.c.state_1) &
(models.Trade.product == subquery.c.product_1)
)
).group_by(
models.Trade.state
)
)
Это не работает для моих нужд, потому что MySQL не выбирает соответствующий product
, но state
и total_export_value
выбираются просто отлично.Я подозреваю, что это связано с тем, как он объединяет два запроса и что product
не используется в GROUP BY query
.