我有一个客户模型,代表客户以及他们在特定日期在商店购买的单件。
例如,如果Customer1以1/1进入并购买了篮球。 虽然Customer2以2/1的价格买了一个Doll,但模型看起来像这样:
|----------------|------------|------------------|------------|
| Customer | Date | Item | Name |
|----------------|------------|------------------|-------------
| 1 | 1/1 | Basketball | Bu |
|----------------|------------|------------------|-------------
| 2 | 2/1 | Doll | Hu |
|----------------|------------|------------------|-------------
现在,如果我希望获取一个表格,按日期分组,这会在某一天汇总所有购买的商品,我会写下这样的内容:
customers.group("DATE_FORMAT(date(started_at), '%d-%m')").count
这会给我一张看起来像这样的表:
|------------|-------------|
| Date | Count |
|------------|-------------|
| 1/1 | 1 |
|------------|-------------|
| 2/1 | 1 |
|------------|-------------|
但是,如果我想在每一天计算每件商品的数量,请加上商店中所有商品的总和?如何在rails中编写它以获得以下输出?
|------------|------------------|------------|-----------|
| Date | Basketball | Doll | Sum |
|------------|------------------|------------|-----------|
| 1/1 | 1 | 0 | 1 |
|------------|------------------|------------|-----------|
| 2/1 | 0 | 1 | 1 |
|------------|------------------|------------|-----------|
答案 0 :(得分:3)
SELECT Date,
SUM( CASE WHEN Item = 'Basketball' THEN 1 ELSE 0 END ) AS BasketBall,
SUM( CASE WHEN Item = 'Doll' THEN 1 ELSE 0 END ) AS Doll,
COUNT(1) AS Totalsum
FROM Customers
GROUP BY Date;