如何在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
非常感谢您的帮助,因为我在 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