在MySQL中

时间:2018-04-22 12:17:23

标签: mysql sql

我有一个包含门票订单的数据集。门票可以5件或3件装,也可以单独购买。我需要使用每个订单销售的门票数量对数据进行分组,以确定它是5包(可被5整除),然后是3包,还是/然后单独(1或2个数量)。因此,如果我的数量为27,我知道订单包括五个“5包”和2个单独的票。

SUM(CASE WHEN (id % 5) = 0 THEN 1 ELSE 0 END) fivepack

我在我的查询中有这个,但是为fivepack和threepack将它们串在一起,并不能消除下一次操作中总数量的起始编号。因此,数量为27,将产生5“五包”和9“三包”的结果,然后是27“个体”。

所以给定一个数量,你将如何首先除以一个大因子,得到余数并除以较小的数,然后最终处理余数?

编辑:

样品包提供购买价格的折扣(与技术问题无关),因此需要首先进行第一次最大分割。因此,正如Gordon Linoff在下面提到的那样,在27张票数量的情况下,你将首先获得最多5个分区,然后通过剩余部分以试图除以3,然后将最终剩余部分作为个体返回。

问题是将SQL中的一个操作的值传递给下一个操作,依此类推。所以我可以做Math1,将Answer1传递给Math2,然后将Answer2传递给Math3。

1 个答案:

答案 0 :(得分:2)

我不完全理解为什么27个是5个包装和2个个体而不是以下任何一个:

  • 27个人
  • 9 3包
  • 4个5包,2个3包,1个人
  • 8个3包和3个人
  • 等等。

但是,如果你想要一种贪婪的方法,你可以使用以下算法:

select floor(num / 5) as five_packs,
       floor( (num - 5 * floor(num / 5)) / 3) as three_packs,
       num - 5 * floor(num / 5) - 3 * floor( (num - 5 * floor(num / 5)) / 3) as singles

Here是一个说明逻辑的SQL小提琴。