如何在SQL中只显示符合某个条件的结果?

How to display only results matching a certain condition in SQL?

非常感谢您的帮助,因为我在 SQL 仍处于初学者水平。谢谢:)

我有代表县、供应商及其各自的文具产品销售额的表格。我必须只显示所有销售额总和超过 100 的县,而不计算供应商 2 (Randall)。对于这些县,我需要县名称、供应商名称和销售额。

这些是我的表格(缩写):

Counties

county_key county_name
1 Custer
2 Kimball
3 Douglas
4 Lancaster

Vendors

vendor_key vendor_name
1 Highsmith
2 Randall
3 Jackson
4 Herford

Sales

county_key vendor_key sales
1 1 50
1 2 70
2 2 20
2 3 30
2 4 80
3 1 50
3 4 20
4 1 10
4 2 30
4 3 90
4 4 20

所以在这种情况下,只应显示县 2 和县 4(因为县 1 的销售额总计超过 100,但只有供应商 2 Randall 的贡献不应该是一部分;县 3 的销售额无论如何都低于 100 ).因此,结果应该是这样的:

county_name vendor_name sales_wo_randall
Kimball Jackson 30
Kimball Herford 80
Lancaster Highsmith 30
Lancaster Jackson 90
Lancaster Herford 20

我编写了这段代码,但未能包含销售额 > 100 的条件:

WITH sales_wo_randall AS (
        SELECT county_key FROM Counties GROUP BY county_key HAVING SUM(sales) > 100
    )
SELECT co.county_name, ve.vendor_name, sa.sales
FROM Sales sa
JOIN Counties co
ON co.county_key = sa.county_key
JOIN Vendors ve
ON ve.vendor_key = sa.vendor_key
WHERE sa.date = '2022-01-01'
AND ve.vendor_name <> 'Randall'
GROUP BY co.county_name, ve.vendor_name, sa.sales
ORDER BY co.county_name

第二次尝试: 我试图设法包含销售额 > 100 的条件,但是随后,我无法包含我想要的列 county_name 和 vendor_name,因为它们需要包含在 GROUP BY 子句中不幸的是,这反过来导致仅获得销售额 > 100 的某些行,而不是总和......这是“正确”的查询,但没有我想要的列,正如我所说:

SELECT
    sa.county_key,
    SUM(sa.sales)
FROM
    Sales sa
WHERE sa.date = '2022-01-01' AND sa.vendor_key <> '2'
GROUP BY
    sa.county_key
HAVING SUM(sa.sales) > 100

提前致谢!

在你的 WHERE 子句中你不能写 'sales > 100' 吗? 或销售额 > '100' 这就是你需要的?

终于,我成功了:)

如果有人遇到同样的问题,这是我的回答:

WITH sales_wo_randall_greater_100 AS
(SELECT
    sa.county_key,
    SUM(sa.sales)
FROM
    Sales sa
WHERE sa.date = '2022-01-01' AND sa.vendor_key <> '2'
GROUP BY
    sa.county_key
HAVING SUM(sa.sales) > 100)

SELECT co.county_name, ve.vendor_name, sa.sales
FROM Sales sa
JOIN Counties co
ON co.county_key = sa.county_key
JOIN Vendors ve
ON ve.vendor_key = sa.vendor_key
WHERE sa.date = '2022-01-01'
AND ve.vendor_name <> 'Randall'
AND co.county_key IN (SELECT county_key FROM sales_wo_randall_greater_100)
GROUP BY co.county_name, ve.vendor_name, sa.sales
ORDER BY co.county_name