描述写一个查询,以查找月份号(例如:4对应于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;它显示错误:
错误1064 (42000)在第4行:您的SQL语法出现了错误;请检查与MySQL服务器版本对应的手册,以获得在第4行的“no_of_payments限制1”附近使用的正确语法。
发布于 2021-07-16 11:22:42
您混淆了group by和order by。第二个group by应该对结果排序,以便得到最大的值:
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子句或按年份和月份进行聚合。
发布于 2021-08-25 12:23:02
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 发布于 2022-01-01 21:29:34
我认为查询中的第二个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;https://stackoverflow.com/questions/68404812
复制相似问题