首页 新闻 会员 周边 捐助

sql 分组筛选问题

0
悬赏园豆:30 [已解决问题] 解决于 2020-10-30 16:17

假设有一个销售表 a, 其中有 日期 date、销售数量 wareqty 、销售价格 saleprice 等字段。现在把他按月汇总,随机抽取每月累计金额 wareqty*saleprice 为的1万 数据明细。这个怎么写?

问题补充:

销售表中每个月都10几万的销售额,现在是想从这里面抽取1万左右销售额的流水明细。
1万可以上下浮动1%

im1coder的主页 im1coder | 初学一级 | 园豆:23
提问于:2018-11-19 15:44
< >
分享
最佳答案
2

不知道理解得对不对

SELECT

FROM
a
WHERE
DATE_FORMAT(date, '%Y-%m') = (
select date from(
SELECT

FROM
(
SELECT
DATE_FORMAT(date, '%Y-%m') AS date,
sum(wareqty * saleprice) AS sum
FROM
a
GROUP BY
DATE_FORMAT(date, '%Y-%m')
) m
WHERE
m.sum = 10000
ORDER BY
rand()
LIMIT 1
) n
)

收获园豆:10
画笔灬 | 小虾三级 |园豆:920 | 2018-11-19 16:30

兄弟,你能不能转成mssql 给我试下。

im1coder | 园豆:23 (初学一级) | 2018-11-19 16:43

@im1coder: 我用mysql 写的,你替换下函数应该就可以了

画笔灬 | 园豆:920 (小虾三级) | 2018-11-19 16:45

@面具灬:我试了不行。销售表中每个月都10几万的销售额,现在是想从这里面抽取1万左右销售额的流水明细。1万可以上下浮动1%。 兄弟有其他思路没?

im1coder | 园豆:23 (初学一级) | 2018-11-19 17:17

@im1coder: 你把那个sum=10000 改下呀,改成 在9900到10100之前再试试

画笔灬 | 园豆:920 (小虾三级) | 2018-11-19 17:19
其他回答(2)
0

你可以先根据data来group by,求出来的date用left来截取年月(比如data格式是2018-10-01,用left(data,7) as date),然后再用data来group by一下where wareqty*saleprice =10000就好

收获园豆:10
_legends | 园豆:509 (小虾三级) | 2018-11-19 15:58

我刚才可能没表述清楚,其实就有个销售表中每个月都10几万的销售额,现在是想从这里面抽取1万左右销售额的流水明细

支持(0) 反对(0) im1coder | 园豆:23 (初学一级) | 2018-11-19 16:16

@im1coder: 你这个条件不多,那答案就太多了,比如1号是1W其他都是0,那我可以有太多结果,1,2号,1,2,3号,1,3号,13245,号都是1W你要确定条件才可以,比如日期段,几天

支持(0) 反对(0) _legends | 园豆:509 (小虾三级) | 2018-11-19 16:26

@_legends: 这个实际业务表里面的里面的流水每天都有,所以不存在这些为0的极端情况。其实是最初的想法就是想把这一万额度均摊到每一天,然后再取销售明细。

支持(0) 反对(0) im1coder | 园豆:23 (初学一级) | 2018-11-19 16:33
0

每月累计金额 wareqty*saleprice 为的1万 数据明细 条件是刚好等于一万 还是大于一万

收获园豆:10
归来的小陆 | 园豆:75 (初学一级) | 2018-11-19 16:36

select month(date),sum(wareqty),sum(saleprice) from a
where wareqty*saleprice>10000

group by month(date)

这样?

支持(0) 反对(0) 归来的小陆 | 园豆:75 (初学一级) | 2018-11-19 16:36

上下浮动1%都ok

支持(0) 反对(0) im1coder | 园豆:23 (初学一级) | 2018-11-19 16:39

@im1coder: select month(date),sum(wareqty),sum(saleprice) from a
where sum(wareqty)sum(saleprice)>=9900 and sum(wareqty)sum(saleprice)<=9900
group by month(date) 你试下 如果取年月的话 month(date) 换成这样 CONVERT(varchar(7), date, 120 )

支持(0) 反对(0) 归来的小陆 | 园豆:75 (初学一级) | 2018-11-19 17:12

@归来的小陆: 兄弟 ,你where 后面是什么意思?

支持(0) 反对(0) im1coder | 园豆:23 (初学一级) | 2018-11-19 17:16

@im1coder: sum(wareqty)乘sum(saleprice)>=9900 and sum(wareqty)乘sum(saleprice)<=10100 因为 博客园屏蔽了星号 *

支持(0) 反对(0) 归来的小陆 | 园豆:75 (初学一级) | 2018-11-19 17:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册