繁体   English   中英

SQL连接:按顺序分组

[英]SQL joins: group with order

我有一个包含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.number ORDER 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 order o INNER JOIN user u ON o.user_id = u.id GROUP BY o.user_id

否则,请查看此文档以了解Window功能: http : //www.postgresql.org/docs/9.5/static/tutorial-window.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM