SQL GROUP BY项,以增量为单位

时间:2012-08-29 12:59:55

标签: sql dql

我正在尝试按项目对示例表进行分组,其中.25价格增量和数量之和。

| item_id | qoute | qty |  --output table-->  | item_id | qoute | qty |
|---------|-------|-----|                     |---------|-------|-----|
| 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  |                      

* Notice how the two quotes of 11.27 and 11.33 are grouped together 
  into 11.25 in the output table

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

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

3 个答案:

答案 0 :(得分: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。

答案 1 :(得分:1)

这是SQLFiddle example

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

答案 2 :(得分:0)

类似的东西:

select item_id, floor(quote*4)/4 as quote_band, sum(qty) from your_table group by item_id, round(quote*4)/4