首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最有生产力的月份

最有生产力的月份
EN

Stack Overflow用户
提问于 2021-07-16 07:03:39
回答 7查看 4.9K关注 0票数 0

描述写一个查询,以查找月份号(例如:4对应于4月),其中支付的金额最多。

表名:payment

列:payment_datepayment_id

我试过这个

代码语言:javascript
复制
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;

它显示错误:

错误1064 (42000)在第4行:您的SQL语法出现了错误;请检查与MySQL服务器版本对应的手册,以获得在第4行的“no_of_payments限制1”附近使用的正确语法。

EN

回答 7

Stack Overflow用户

发布于 2021-07-16 11:22:42

您混淆了group byorder by。第二个group by应该对结果排序,以便得到最大的值:

代码语言:javascript
复制
SELECT count(payment_id) as no_of_payments, MONTH(payment_date) as payment_month 
FROM payment
GROUP BY payment_month
ORDER BY no_of_payments DESC
LIMIT 1;

默认情况下,排序是升序的,因此要获得最大的排序,需要一个降序排序。

一般来说,一个月没有一年是不太有用的。有时,你想把几个月后的几年,但这是相当罕见的。您的问题是不明确的,它是想要一个日历月(即在某个特定年份)还是整个月份(比如检测季节性),但是您可能需要一个WHERE子句或按年份和月份进行聚合。

票数 1
EN

Stack Overflow用户

发布于 2021-08-25 12:23:02

代码语言:javascript
复制
Select month(payment_date) as mn, 
count(payment_id) as 
No_of_payments from payment 
group by mn 
order by No_of_payments desc limit 1 
票数 1
EN

Stack Overflow用户

发布于 2022-01-01 21:29:34

我认为查询中的第二个GROUP BY只是一个错误,您需要的是ORDER BY

然而,这个任务并不是很精确,因为它没有指定在领带情况下该做什么。通常情况下,如果有两个前两个月,一个不会想任意选择一个,而是显示两者。

在这种情况下,LIMIT 1一点帮助都没有,特别是,因为与标准SQL的FETCH子句不同,它没有tie子句。

实现这一目标的最简单方法是一个窗口函数(在下面的查询中是MAX OVER):

代码语言:javascript
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68404812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档