Mysql 以美元计算,找出每年每学期销售最差和最好的产品
我将表Mysql 以美元计算,找出每年每学期销售最差和最好的产品,mysql,Mysql,我将表sales\u按年份/学期定义为 创建表“按年份/学期列出的销售额”( `订单年份整(4)不为空, `第1学期, `第二学年学期'VARCHAR(6), `产品代码'VARCHAR(10), `总销售额(单位:美元)浮动 )引擎=InnoDB; 它有以下数据: | order_year | semester | year_semester | productCode | total_sales_in_usd | |------------|----------|-------------
sales\u按年份/学期定义为
创建表“按年份/学期列出的销售额”(
`订单年份整(4)不为空,
`第1学期,
`第二学年学期'VARCHAR(6),
`产品代码'VARCHAR(10),
`总销售额(单位:美元)浮动
)引擎=InnoDB;
它有以下数据:
| order_year | semester | year_semester | productCode | total_sales_in_usd |
|------------|----------|---------------|-------------|--------------------|
| 2019 | 1 | 2019-1 | S32_2206 | 2025.16 |
| 2019 | 1 | 2019-1 | S24_2972 | 2285.76 |
| 2019 | 1 | 2019-1 | S18_3232 | 26052.88 |
| 2019 | 2 | 2019-2 | S24_1937 | 6770.34 |
| 2019 | 2 | 2019-2 | S24_2840 | 7159.86 |
| 2019 | 2 | 2019-2 | S12_1099 | 44466.99 |
| 2019 | 2 | 2019-2 | S10_1949 | 48878.16 |
| 2019 | 2 | 2019-2 | S18_3232 | 77427.42 |
| 2020 | 1 | 2020-1 | S24_1937 | 3903.19 |
| 2020 | 1 | 2020-1 | S24_2840 | 4470.39 |
| 2020 | 1 | 2020-1 | S10_4698 | 37297.31 |
| 2020 | 1 | 2020-1 | S12_1108 | 39203.54 |
| 2020 | 1 | 2020-1 | S18_3232 | 43418.87 |
| 2020 | 2 | 2020-2 | S24_3969 | 7907.94 |
| 2020 | 2 | 2020-2 | S24_1937 | 8303.47 |
| 2020 | 2 | 2020-2 | S12_1108 | 66283.92 |
| 2020 | 2 | 2020-2 | S18_3232 | 76962.53 |
| 2021 | 1 | 2021-1 | S24_3969 | 4235.98 |
| 2021 | 1 | 2021-1 | S24_1937 | 5660.64 |
| 2021 | 1 | 2021-1 | S10_4698 | 34856.12 |
| 2021 | 1 | 2021-1 | S18_3232 | 52978.28 |
如何以美元获得销售额最少/最多的产品,以及每个年度/学期的productCode
,格式如下:
| order_year | semester | year_semester | productCode_least_sales | least_sales_in_usd | productCode_most_sales | most_sales_in_usd |
|------------|----------|---------------|-------------------------|--------------------|------------------------|-------------------|
| 2019 | 1 | 2019-1 | S32_2206 | 2025.16 | S18_3232 | 26052.88 |
| 2019 | 2 | 2019-2 | S24_1937 | 6770.34 | S18_3232 | 77427.42 |
| 2020 | 1 | 2020-1 | S24_1937 | 3903.19 | S18_3232 | 43418.87 |
| 2020 | 2 | 2020-2 | S24_3969 | 7907.94 | S18_3232 | 76962.53 |
| 2021 | 1 | 2021-1 | S24_3969 | 4235.98 | S18_3232 | 52978.28 |
我试图做的是在
选择
最小值(以美元表示的总销售额)
,最大值(以美元表示的总销售额)
时使用一个案例,但我无法获得每个值对应的产品代码
选择
订购年份:,
学期
第二学年,
当
最小值(以美元表示的不同总销售额),然后产品代码结束
作为产品代码(至少)(销售),,
最小值(以美元表示的总销售额),
当
最大值(以美元表示的不同总销售额),然后productCode结束为productCode most销售额,
最大值(总销售额(单位:美元)
从…起
销售(按年度、学期)
分组
学年/学期;
您可以改为执行左连接
select t1.*, minProduct.product_code, t2.minSales, maxProduct.product_code, t3.maxSales from
(select distinct order_year
, semester
, year_semester
from sales_by_year_semester) as t1
left join
(select order_year
, min(total_sales_in_usd) as minSales
from sales_by_year_semester group by order_year) as t2 on t2.order_year = t1.order_year
left join
(select order_year
, max(total_sales_in_usd) as maxSales
from sales_by_year_semester group by order_year, ) as t3 on t3.order_year = t1.order_year
left join
(select product_code, total_sales_in_usd, order_year
from sales_by_year_semester) as minProduct
on minProduct.total_sales_in_usd = t2.minSales and minProduct.order_year=t2.order_year
left join
(select product_code, total_sales_in_usd, order_year
from sales_by_year_semester) as maxProduct
on maxProduct.total_sales_in_usd = t3.maxSales and maxProduct.order_year=t2.order_year
对于这类问题,我喜欢使用ROW\u NUMBER
。假设您使用的是MySQL 8+,我们可以尝试:
WITH cte AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY year_semester ORDER BY total_sales_in_usd) rn_min,
ROW_NUMBER() OVER (PARTITION BY year_semester ORDER BY total_sales_in_usd DESC) rn_max
FROM sales_by_year_semester
)
SELECT
order_year,
semester,
year_semester,
MAX(CASE WHEN rn_min = 1 THEN productCode END) AS productCode_least_sales,
MAX(CASE WHEN rn_min = 1 THEN total_sales_in_usd END) AS least_sales_in_usd,
MAX(CASE WHEN rn_max = 1 THEN productCode END) AS productCode_most_sales,
MAX(CASE WHEN rn_max = 1 THEN total_sales_in_usd END) AS most_sales_in_usd
FROM cte
GROUP BY
order_year,
semester,
year_semester
ORDER BY
order_year,
semester,
year_semester;
我想我是糊涂了。您想计算每个产品的MAX
和MIN
销售额吗?您想知道哪个产品的MAX
,哪个产品的MIN
?您想知道哪些产品的总销售额最大,哪些产品的总销售额最小吗?这是以美元计算还是以频率计算?我需要找到每个年度
学期
销售额最少、销售额最多的产品代码
,按计数还是按美元计算?按总销售额(以美元计算)
顺便说一句,货币几乎从不浮动;这就是十进制被发明的原因!