[英]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.name
, o.date_created
和o.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.