gpt4 book ai didi

mysql - SQL 连接 : group with order

转载 作者:行者123 更新时间:2023-11-29 06:20:00 25 4
gpt4 key购买 nike

我有一个包含 4 个表的数据库,如下所示:

USER table:
* id: INTEGER, AUTO INCREMENT...
* name: VARCHAR

PRODUCT table:
* id: INTEGER, AUTO INCREMENT...
* name: VARCHAR


ORDER table:
* id: INTEGER, AUTO INCREMENT...
* number: VARCHAR
* user_id: FOREIGN KEY to USER table
* date_created: DATETIME

ORDER_TO_PRODUCT table:
* order_id: FOREIGN KEY to ORDER table
* product_id: FOREIGN KEY to PRODUCT table
* quantity: INTEGER

我想创建一个查询来列出所有用户,每个用户都有最后一次下订单(根据 order.date_created)日期和编号。

我的想法是按用户对所有结果进行分组(每个用户一行),然后按订单日期排序。但是,这似乎不起作用:

SELECT u.name, o.date_created, o.number
FROM order o
INNER JOIN user u ON o.user_id = u.id
GROUP BY o.user_id
ORDER BY o.created DESC

问题是 - 我做错了吗?是否有可能在没有子查询的情况下实现目标?

最佳答案

您的查询需要知道如何处理 u.nameo.date_createdo.numberORDER BY 是不够的。您当前可以在没有聚合函数的情况下处理的唯一字段是 o.user_id,因为这是您的 GROUP BY

要找到最后的订单,您通常需要使用 Window 函数,例如 PARTITION OVER。但是如果你的 date_created 和 number 是自然排序的,你也可以使用简单的 MAX

SELECT o.user_id, MAX(u.name), MAX(o.date_created), MAX(o.number)
FROM 订单 o
INNER JOIN user u ON o.user_id = u.id
GROUP BY o.user_id

否则请查看此文档以了解窗口函数:http://www.postgresql.org/docs/9.5/static/tutorial-window.html

关于mysql - SQL 连接 : group with order,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33766001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com