gpt4 book ai didi

sql - 在 SQL 中组合类似的行并聚合一些值

转载 作者:行者123 更新时间:2023-11-29 14:05:42 24 4
gpt4 key购买 nike

我有一些无意义数据的示例表,如下所示:

+--------+---------+---------+--------+---------+
| 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 变成“Fruit”,然后把 Lettuce、Spinach 和 Cabbage 变成“Vegetable”,所有这些都不会丢失存储在 中的值金额收入

我要实现的表格应该如下所示:

+--------+---------+-----------+--------+---------+
| 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;

此查询仍返回完整的行列表,而不是聚合类似的行。我将如何修改它以实现我想做的事情?

最佳答案

您需要通过语句从组中删除项目。以下是更多详细信息。

由于您正在抓取项目(苹果、橙子等),在您从顶部选择和分组依据中删除该项目之前,它仍然不会显示它们仅按 item_category 分组。

Group by 按语句的每个唯一组合进行分组,因此必须删除项目。

见下文。注意:我将 item_category 重命名为 item,这样看起来就像您所说的那样输出

SELECT vendor, 
day,
item_category as item,
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_category;

关于sql - 在 SQL 中组合类似的行并聚合一些值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57734090/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com