首页 > 解决方案 > 最有生产力的月份

问题描述

描述 编写查询以查找付款次数最多的月份数(例如: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”附近使用正确的语法

标签: mysqlsql

解决方案


我想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;

推荐阅读