2

我正在尝试按项目对示例表进行分组,其中包含 0.25 的价格增量和数量的总和。

| item_id | qout | 数量 | --输出表--> | item_id | qout | 数量 |
|---------|-------|------| |---------|-------|------|
| 10 | 10.99 | 10 | | 10 | 10.00 | 20 |
| 10 | 10.00 | 20 | | 10 | 10.75 | 10 |
| 10 | 11.00 | 1 | | 10 | 11.00 | 1 |
| 10 | 11.27 | 5 | | 10 | 11.25 | 10 |
| 10 | 11.33 | 5 | | 10 | 11.50 | 10 |
| 10 | 11.50 | 10 |                      

* 注意 11.27 和 11.33 的两个引号是如何组合在一起的
  在输出表中输入 11.25

我不知道是否可以使用 SQL 来执行此操作。这最终将在 Doctrine2 DQL 中实现,但我应该能够轻松地将任何 SQL 移植到它。

我真的很想用 SQL 来做这件事。但如果不可能,我可能会想出一种方法来用算法来做到这一点。

4

3 回答 3

1

这是一个SQLFiddle 示例

select item_id,
        floor(qoute)
        +(floor(floor((qoute-floor(qoute))*100)/25)*25)/100 
        as quote,
        sum(qty)
        from t
        group by floor(qoute)
        +(floor(floor((qoute-floor(qoute))*100)/25)*25)/100 
order by 1,2
于 2012-08-29T13:29:59.483 回答
1

这是一种方法,使用 SQL Server 中的语法:

select item_id, floor(quote * 4.0)/4.0 as roundquote, sum(qty) as qty
from t
group by item_id, floor(quote * 4.0)
order by 1, 2

这会将值乘以 4,截断为较小的整数,然后除以 4。这应该四舍五入到最接近的 $0.25。

于 2012-08-29T13:20:33.697 回答
0

就像是:

select item_id, floor(quote*4)/4 as quote_band, sum(qty) from your_table group by item_id, round(quote*4)/4
于 2012-08-29T13:21:43.273 回答