SQL查询出每个产品哪两年的销售额最多

66e83c3d22a79a80986f8caff4b8a79.png

yzm325564 发布于 2021-6-23 08:39
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
山东郭德纲Lv2见习互助
发布于2021-6-23 10:08(编辑于 2021-6-23 11:02)

select * from (

SELECT

产品名称,

ROW_NUMBER ( ) over ( PARTITION BY 产品名称 ORDER BY 销售额 DESC ) rn,

销售额,

年份 

FROM

(

SELECT

产品名称,

订单明细.单价 * 数量 * ( 1-折扣 ) AS 销售额,

substr( 订购日期, 1, 4 ) AS 年份 

FROM

订单明细,订单,产品 

WHERE

订单明细.订单 ID = 订单.订单 ID 

AND 订单明细.产品 ID = 产品.产品 ID 

GROUP BY

产品名称,年份 

ORDER BY

产品名称,销售额 DESC 

) aa )a

WHERE

rn < 3

  • yzm325564 yzm325564(提问者) 不加最后的 where < 3,是可以正常运行的,加上之后就出错误,误用别名窗口函数
    2021-06-23 10:58 
  • 山东郭德纲 山东郭德纲 回复 yzm325564(提问者) 重新看下,再套一层,我修改回答了
    2021-06-23 11:03 
  • yzm325564 yzm325564(提问者) 回复 山东郭德纲 OK,十分感谢!
    2021-06-23 11:10 
  • yzm325564 yzm325564(提问者) 回复 山东郭德纲 刚刚那个可以在sqlite查询,如果在mySQL中查询,要怎么改呢?
    2021-06-23 11:22 
  • 山东郭德纲 山东郭德纲 回复 yzm325564(提问者) ROW_NUMBER ( ) over ( PARTITION BY 产品名称 ORDER BY 销售额 DESC ) rn 这个函数mysql也能用啊
    2021-06-23 14:57 
最佳回答
0
shirokoLv6资深互助
发布于2021-6-23 08:41

select * from ( 

select 年份,sum(销售额) from 表

group by 年份

order by sum(销售额) desc

)

limit 2

  • yzm325564 yzm325564(提问者) 有三张表,订单、订单明细和产品,我可以查出其他的,但是无法取每个产品前两年的 select 产品名称,订单明细.单价 * 数量 * (1-折扣) as 销售额,substr(订购日期,1,4) as 年份 from 订单明细,订单,产品 where 订单明细.订单ID = 订单.订单ID and 订单明细.产品ID = 产品.产品ID group by 产品名称,年份 order by 产品名称,销售额 DESC
    2021-06-23 09:11 
  • yzm325564 yzm325564(提问者) 上面那张图是最终作为参考的
    2021-06-23 09:12 
  • shiroko shiroko 回复 yzm325564(提问者) 不懂。。你把上面那张图的查询作为子查询不就好了
    2021-06-23 10:07 
  • yzm325564 yzm325564(提问者) 回复 shiroko 多谢
    2021-06-23 11:11 
最佳回答
0
liu.yangLv2初级互助
发布于2021-6-23 09:44

row_number()over(partition by 产品名称  order by 销售额 desc) as rn

取 rn<=2 的数据即可

  • yzm325564 yzm325564(提问者) 这样也有错误,是我写错了吗? select 产品名称,订单明细.单价 * 数量 * (1-折扣) as 销售额,substr(订购日期,1,4) as 年份,row_number()over(partition by 产品名称 order by 销售额 desc) as rn from 订单明细 left join 订单 on 订单明细.订单ID = 订单.订单ID left join 产品 on 订单明细.产品ID = 产品.产品ID where rn <= 2 group by 产品名称,年份 order by 产品名称,销售额 DESC
    2021-06-23 10:12 
  • liu.yang liu.yang 回复 yzm325564(提问者) row_number()over() 不需要 group by 并且 rn<=2 是需要再外面再筛选,参考楼下那位的写法
    2021-06-23 10:49 
  • yzm325564 yzm325564(提问者) 回复 liu.yang 多谢了
    2021-06-23 11:11 
  • 4关注人数
  • 742浏览人数
  • 最后回答于:2021-6-23 11:02
    请选择关闭问题的原因
    确定 取消
    返回顶部