sql - 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;
如果两个人都花费了相同的金额,是否可以输出一个以上的人?
解决方案
使用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
.
推荐阅读
- authorization - .Net 5 Web API 授权服务器 OpenIdDict 与自定义数据库存储(无 EF)
- python - Django NoReverseMatch 和 Django-Verify-Email
- python - 如何将 Python 列表的每个元素括在括号中?
- typescript - 打字稿插件中的 NuxtJs publicRuntimeConfig
- java - 无法更新Mysql中的数据
- javascript - 尝试实现 editor.md 时出错:未定义 Zepto
- c# - 如何从 appsettings.json 获取 ConnectionString 到 DA 项目中?
- javascript - RxJS 暂停计时器 Observable
- android - 如果用 ImageBackground 包装,React Native KeyboardAvoidingView 不起作用
- php - 从数据库中获取国家列表并尝试在 null 上读取属性“country_name”