2

以下のテーブルの例をアイテムごとにグループ化しようとしています。価格の増分は0.25で、数量の合計です。

| item_id | qoute | 数量| --出力テーブル->| item_id | qoute | 数量|
| --------- | ------- | ----- | | --------- | ------- | ----- |
| 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の2つの引用符がどのようにグループ化されているかに注意してください
  出力テーブルの11.25に

SQLでこれが可能かどうかはわかりません。これは最終的にDoctrine2DQLに実装されますが、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

SQLServerの構文を使用する1つの方法は次のとおりです。

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 に答える