我有一个表,其中包含销售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 |
+-----+--------+-----------+-------------+
您想获得每月最畅销的记录。
[有几种可能的方法,但是使用相关的子查询通常可以提供更好的性能(我认为是可读性):
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)
上的索引。