首页 > 解决方案 > SQLite 使用 LIMIT 1 获得多个结果

问题描述

我有以下问题。

任务的一部分是确定在 2000 年到 2020 年间花费最多的访问者。它看起来像这样。

SELECT UserEMail FROM Visitor
JOIN Ticket ON Visitor.UserEMail = Ticket.VisitorUserEMail
where Ticket.Date> date('2000-01-01') AND Ticket.Date < date ('2020-12-31')
Group by Ticket.VisitorUserEMail
order by SUM(Price) DESC;

如果两个人都花费了相同的金额,是否可以输出一个以上的人?

标签: sqlsqlitelimit

解决方案


使用rank()

SELECT VisitorUserEMail
FROM (SELECT VisitorUserEMail, SUM(PRICE) as sum_price,
             RANK() OVER (ORDER BY SUM(Price) DESC) as seqnum
      FROM Ticket t
      WHERE t.Date >= date('2000-01-01') AND Ticket.Date <= date('2021-01-01')
      GROUP BY t.VisitorUserEMail
     ) t
WHERE seqnum = 1;

注意:您不需要JOIN,假设购票者实际上是访客。如果该假设不成立,则使用JOIN.


推荐阅读