【发布时间】:2019-08-30 23:24:30
【问题描述】:
我有一些无意义数据的示例表,显示如下:
+--------+---------+---------+--------+---------+
| Vendor | Day | Item | Amount | Revenue |
+--------+---------+---------+--------+---------+
| Bob | Monday | Apple | 1 | 1.00 |
| Bob | Monday | Orange | 1 | 1.00 |
| Bob | Monday | Peach | 2 | 2.00 |
| Bob | Monday | Lettuce | 3 | 3.00 |
| Bob | Monday | Spinach | 5 | 5.00 |
| Bob | Monday | Cabbage | 3 | 3.00 |
| Bob | Tuesday | Apple | 2 | 2.00 |
| Bob | Tuesday | Orange | 2 | 2.00 |
| Bob | Tuesday | Peach | 0 | 0.00 |
| Bob | Tuesday | Lettuce | 3 | 3.00 |
| Bob | Tuesday | Spinach | 5 | 5.00 |
| Bob | Tuesday | Cabbage | 5 | 5.00 |
| Cindy | Monday | Apple | 1 | 1.00 |
| Cindy | Monday | Orange | 3 | 3.00 |
| Cindy | Monday | Peach | 3 | 3.00 |
| Cindy | Monday | Lettuce | 6 | 6.00 |
| Cindy | Monday | Spinach | 8 | 8.00 |
| Cindy | Monday | Cabbage | 2 | 2.00 |
| Cindy | Tuesday | Apple | 1 | 1.00 |
| Cindy | Tuesday | Orange | 3 | 3.00 |
| Cindy | Tuesday | Peach | 0 | 0.00 |
| Cindy | Tuesday | Lettuce | 2 | 2.00 |
| Cindy | Tuesday | Spinach | 3 | 3.00 |
| Cindy | Tuesday | Cabbage | 4 | 4.00 |
+--------+---------+---------+--------+---------+
我想将Item 中的值组合成类似的类别,并将信息压缩成更少的行,因为不需要这么多细节。例如,我想将 Apple、Orange 和 Peach 转化为“水果”,将生菜、菠菜和卷心菜转化为“蔬菜”,所有这些都不会丢失存储在 Amount 中的值和Revenue。
我想要实现的表格应该是这样的:
+--------+---------+-----------+--------+---------+
| Vendor | Day | Item | Amount | Revenue |
+--------+---------+-----------+--------+---------+
| Bob | Monday | Fruit | 4 | 4.00 |
| Bob | Monday | Vegetable | 11 | 11.00 |
| Bob | Tuesday | Fruit | 4 | 4.00 |
| Bob | Tuesday | Vegetable | 13 | 13.00 |
| Cindy | Monday | Fruit | 7 | 7.00 |
| Cindy | Monday | Vegetable | 16 | 16.00 |
| Cindy | Tuesday | Fruit | 4 | 4.00 |
| Cindy | Tuesday | Vegetable | 9 | 9.00 |
+--------+---------+-----------+--------+---------+
这是我当前的 SQL 查询:
SELECT vendor,
day,
item_category,
Sum(amount),
Sum(revenue)
FROM (SELECT mytable.*,
CASE item
WHEN 'Apple' THEN 'Fruit'
WHEN 'Orange' THEN 'Fruit'
WHEN 'Peach' THEN 'Fruit'
WHEN 'Lettuce' THEN 'Vegetable'
WHEN 'Spinach' THEN 'Vegetable'
WHEN 'Cabbage' THEN 'Vegetable'
END AS item_category
FROM mytable) AS x
GROUP BY vendor,
day,
item,
item_category;
此查询仍返回完整的行列表,而不是聚合类似的行。我将如何修改它以实现我想要做的事情?
【问题讨论】:
标签: sql postgresql aggregate-functions