sql - 分组后的最大值与总和
问题描述
我试图从这两个表中获取客户和发票信息:每个国家/地区每年的发票总额!所以我写的是:
SELECT SUM(i.total) AS Total_invoice, strftime(‘%Y’, i.InvoiceDate) AS year, c.country
FROM invoice i JOIN
customer c
ON i.CustomerId = c.CustomerId
GROUP BY 2,3
ORDER BY 1 DESC;
所以我得到了每年的发票总额!现在,如果我想要每个国家/地区的最大(总计),你怎么办?例如,我想为每个国家/地区提供最大(总计)、年份和国家/地区!你能帮忙吗?谢谢你在这里输入图片描述
解决方案
例如,我想为每个国家/地区提供最大(总计)、年份和国家/地区!
为此,请使用窗口函数:
SELECT yc.*
FROM (SELECT SUM(i.total) AS Total_invoice, strftime(‘%Y’, i.InvoiceDate) AS year, c.country,
ROW_NUMBER() OVER (PARTITION BY c.country ORDER BY SUM(i.total) DESC) as seqnum
FROM invoice i JOIN
customer c
ON i.CustomerId = c.CustomerId
GROUP BY 2, 3
) yc
WHERE seqnum = 1
ORDER BY 1 DESC;
推荐阅读
- ruby-on-rails - 如何用 3 个或语句编写 Pundit 政策?
- python-3.x - 使用 Selenium 和 Webdriver 触发 onchange 事件以访问输入字段
- accurev - 在 Accurev CLI 中,如何查看我的工作区陈旧文件
- c++ - C++类成员变量初始化一次
- c++ - MSVC 2008 更好的时机?
- c# - C#控制台应用程序删除文件和文件夹
- postgresql - 我可以声明一个接受任何类型数组的 postgres 函数吗?
- python - 从需要用户输入的python运行linux命令
- c - 将数据类型分配给用户定义的函数
- sql - 使用 SQL 将下一行插入满足条件的第一行列