gpt4 book ai didi

SQL 查找单次出现的引用

转载 作者:行者123 更新时间:2023-12-04 16:06:21 26 4
gpt4 key购买 nike

我正在尝试为以下问题找到纯 SQL 解决方案:

如果我销售油漆和画笔,并记录销售的颜色,如下所示:

    select OrderNumber, Product, Product_Type, Qty from Sales

+-------------+------------+--------------+-----+
| OrderNumber | Product | Product_Type | Qty |
+-------------+------------+--------------+-----+
| 0001 | Red | Paint | 1 |
| 0001 | Blue | Paint | 2 |
| 0001 | Green | Paint | 1 |
| 0001 | Paintbrush | Brush | 1 |
| 0002 | Green | Paint | 1 |
| 0002 | Paintbrush | Brush | 1 |
| 0003 | Blue | Paint | 4 |
| 0003 | Red | Paint | 5 |
| 0003 | Paintbrush | Brush | 1 |
| 0004 | Blue | Paint | 2 |
| 0004 | Paintbrush | Brush | 1 |
| 0005 | Green | Paint | 1 |
| 0005 | Paintbrush | Brush | 1 |
+-------------+------------+--------------+-----+

有没有办法隔离只售出一 jar 油漆且该 jar 油漆是绿色的订单?我想忽略画笔,因为每个订单都包含画笔。因此,从示例数据集中,所需的结果将是订单 #0002 和 #0005,因为在每个订单中,售出的油漆 jar 总数为 1,并且这些油漆 jar 是绿色的。

我认为答案可能在于 group by 子句和一些聚合函数以及可能的子查询。但是,我不太确定如何将这些组合起来以获得我需要的结果。

最佳答案

首先,过滤掉所有画笔。这可以在 where 子句中完成。

然后您需要将每个订单作为一堆记录进行处理。这可以通过 group by OrderNumber, Product_Type 来实现,它将您的表分成订单组。然后,您可以在 having 子句中过滤这些组,以仅查找其中包含单个已售商品的组。

select OrderNumber
from Sales
where Product_Type <> 'Brush'
group by OrderNumber, Product_Type
having sum(qty) = 1
and min(Product) = 'Green'

关于SQL 查找单次出现的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30734632/

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