MySQL:将MAX方法与GROUP BY子句错误1055组合

问题描述 投票:0回答:1

我有一个表,其中包含销售3个不同品牌的汽车推销员的月销售额。我想创建一个查询,该查询返回一个年份,月份和最畅销汽车品牌的表格,以及该月的销售额。

表的一部分在下面:

+-----+--------+-----------+-------------+
|NYEAR| NMONTH | CAR_BRAND | AMOUNT_SOLD |
+-----+--------+-----------+-------------+
|2018    12     HONDA            15      |
|2018    12     TOYOTA           12      |
|2018    12     FORD             22      |
|2019     1     HONDA            14      |
|2019     1     TOYOTA           13      |
|2019     1     FORD             34      |
|2019     2     TOYOTA           10      |
|2019     2     FORD             19      |
|2019     2     HONDA            13      |
|2019     3     FORD             14      |
|2019     3     OYOTA            13      |
|2019     3     HONDA            15      |
|2019     4     HONDA            12      |
|2019     4     TOYOTA           14      |
|2019     4     FORD             11      |
|2019     5     FORD             11      |
|2019     5     HONDA            13      |
|2019     5     TOYOTA           10      |
+-----+--------+-----------+-------------+

我每月可以获得最大AMOUNT_SOLD的答案,但无法获得商店名称。这是我尝试过的查询。

SELECT NYEAR, NMONTH, MAX(SALES_AMOUNT)
FROM MONTHLY_CAR_SALES
GROUP BY NYEAR, NMONTH;

但是,当我尝试将CAR_BRAND添加到查询的选择中时:

SELECT NYEAR, NMONTH, CAR_BRAND, MAX(SALES_AMOUNT)
FROM MONTHLY_CAR_SALES
GROUP BY NYEAR, NMONTH;

我得到:

错误代码:1055。SELECT列表的表达式#3不在GROUP BY中子句,包含非聚合列“ USED_CAR_SALES.MONTHLY_CAR_SALES.CAR_BRAND”,该功能无法正常使用取决于GROUP BY子句中的列;这与sql_mode = only_full_group_by

[当我尝试将CAR_BRAND添加到分组子句中时,它返回与上述完全相同的表,其中显示了每个月的每个品牌。

我想要的桌子是这样的:

+-----+--------+-----------+-------------+
|NYEAR| NMONTH | CAR_BRAND | AMOUNT_SOLD |
+-----+--------+-----------+-------------+
|2018    12     FORD             22      |
|2019     1     FORD             34      |
|2019     2     FORD             19      |
|2019     3     HONDA            15      |
|2019     4     TOYOTA           14      |
|2019     5     HONDA            13      |
+-----+--------+-----------+-------------+
mysql group-by max mysql-error-1055
1个回答
0
投票

您想获得每月最畅销的记录。

[有几种可能的方法,但是使用相关的子查询通常可以提供更好的性能(我认为是可读性):

select nyear, nmonth, car_brand, sales_amount
from monthly_car_sales cs
where sales_amount = (
    select max(sales_amount) 
    from monthly_car_sales cs1 
    where cs1.nyear = cs.nyear and cs1.nmonth = cs.nmonth
)

出于性能考虑,请考虑使用(nyear, nmonth, sales_amount)上的索引。

© www.soinside.com 2019 - 2024. All rights reserved.