这是一个问题。我有三个带有以下列的表:
transactions (table): transact_id, customer_id, transact_amt, product_id,
products (table): product_id, product_cost, product_name, product_category
customers (table): customer_id, joined_at, last_login_at, state, name, email
我想要一个查询,找出每个州和每个州最流行的项目。其中一个棘手的部分是某些产品名有多个产品id,因此我建议将生成两列输出的三个表连接起来:state和product name。在这之前做得很好:
SELECT p.product_name, c.state
FROM products p
INNER JOIN transactions t
ON p.product_id = t.product_id
INNER JOIN customers c
ON c.customer_id = t.customer_id
这将选择所有产品以及客户所在的州。问题是我找不到方法来给每个州最受欢迎的产品排名。我尝试了不同的分组方式、排序方式和使用子查询,但都没有成功。我怀疑我需要做子查询,但我找不到解决它的方法。预期结果如下:
most_popular_product | state
Bamboo | WA
Walnut | MO
任何帮助都将不胜感激。
谢谢您!
1条答案
按热度按时间k5hmc34c1#
您需要一个子查询来获取每个状态下每个产品的事务计数。
然后编写另一个将此作为子查询的查询,并获取每个状态的最高计数。
最后,将它们结合在一起:
这基本上与sql select only列上具有最大值的行的模式相同,只是将第一个分组的查询用作要分组的表。