我已经在这一块砖墙上打了一堵砖墙,希望比我更聪明的人能指出我正确的方向?
我有一个包含订单的ORDERS表(令人惊讶)。
我还有一个DOWNLOADS表。 DOWNLOADS包含ORDERID字段,该字段是订单表的ID。
DOWNLOADS有一个ATTEMPT字段。每次下载都会在DOWNLOADS中创建一条记录,每条记录都会增加ATTEMPT中的值。
我只是想在ATTEMPT中获取MAX值,因此我可以告诉用户他们正在尝试什么(或者他们已经尝试了多少次)。
下载可能有也可能没有任何相关记录,具体取决于用户是否尚未尝试下载。每次下载尝试,都会在DOWNLOADS中创建一条记录。
因此,在简单化的术语中,我试图做类似的事情:
SELECT orders.*,MAX(downloads.attempt)
FROM orders
LEFT JOIN downloads on downloads.orderid = orders.id
WHERE orders.userid = '123'
或者更确切地说,我正在尝试获取所有用户订单,下载尝试的最大值为MAX(DOWNLOADS中的记录) - 如果没有,则为null。
我整天都在浏览stackoverflow,看一下类似的例子但不知怎的,所有类似的例子都非常复杂。是否有一种简单(或至少是优雅)的方式?
非常感谢一点帮助。
感谢。
答案 0 :(得分:1)
试试这个 -
SELECT orders.userid, MAX(downloads.attempt)
FROM orders
LEFT JOIN downloads on downloads.orderid = orders.id
group by orders.userid
答案 1 :(得分:0)
SELECT orders.*,MAX(downloads.attempt) FROM orders
LEFT OUTER JOIN downloads on downloads.orderid = orders.id
WHERE orders.userid = '123'
GROUP BY orders.id
答案 2 :(得分:-2)
试试这个:
SELECT orders.userid,MAX(IFNULL(downloads.attempt,0))
FROM orders
LEFT JOIN downloads on downloads.orderid = orders.id
GROUP BY orders.userid