mysql - 最有生产力的月份
问题描述
描述 编写查询以查找付款次数最多的月份数(例如:4 对应于四月)。
表名:payment
列:payment_date
, payment_id
,
我试过这个
SELECT count(payment_id) as no_of_payments, MONTH(payment_date) as payment_month
FROM payment
group BY payment_month
group BY no_of_payments
limit 1;
它显示错误:
第 4 行的 ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 4 行的“group BY no_of_payments limit 1”附近使用正确的语法
解决方案
我想GROUP BY
您查询中的第二个只是一个错字,而您想要的是ORDER BY
。
但是,该任务不是很精确,因为它没有指定在出现平局时该怎么做。通常,如果有两个最高月份,人们不会想任意选择一个,而是同时显示两个。
在那种情况下LIMIT 1
根本没有帮助,特别是因为与标准 SQL 的FETCH
子句不同,它没有 tie 子句。
最简单的方法是使用窗口函数(MAX OVER
在下面的查询中):
select no_of_payments, payment_month
from
(
select
count(*) as no_of_payments,
max(count(*)) over () as max_no_of_payments,
month(payment_date) as payment_month
from payment
group by month(payment_date)
) months
where no_of_payments = max_no_of_payments
order by payment_month;
推荐阅读
- bootstrap-4 - 如何使用 bootstrap 4.4.x 模式从外部页面加载内容
- ios - 当提示输入远程主机的 SCP 密码时,如何在 bash 中添加回车?
- .net - Razor MVVM 中的局部视图
- vim - vscode 中的“vim:filetype”等价物
- reactjs - 具有默认值的 React-Router UrlParameter 未显示活动
- junit - 尽管遇到了 VertexTestContext.completeNow() 和 message.reply,但在 Junits 中发生了 Vertx 超时异常
- javascript - 有没有办法添加一个用户可以动态重命名的具有默认值的输入字段?
- android - 实施实施 'com.google.android.gms:play-services-ads:18.3.0' 后构建失败
- r - 在 R 中替换数据框中的字符值的问题
- typescript - 抽象类+它的静态方法类型在打字稿中