MySQL - лучший продукт, экспортируемый каждым государством на основе суммы отдельных export_values - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь написать запрос в 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.

...