在不允许嵌套 SELECTS 时选择不在 GROUP BY 中的字段
Selecting fields that are not in GROUP BY when nested SELECTS aren't allowed
我有 tables:
Product(code (PK), pname, (....), sid (FK)),
Supplier(sid(PK), sname, (....))
作业是:
Find Suppliers that supply only one product. Display their name (sname
) and product name (pname
).
在我看来这是一个 GROUP BY
问题,所以我使用了:
SELECT sid FROM
Product GROUP BY sid
HAVING CAST(COUNT(*) AS INTEGER) = 1;
此查询为我找到了 sid
只供应一种产品的列表,但现在我遇到了一个问题:
- 分配禁止任何形式的嵌套
SELECT
查询。
- 我写的查询结果只有一列。 (
sid
列)
- 因此,我无法访问产品名称,因为它不在查询结果 table 中,如果我将其添加到
GROUP BY
语句中,则分组将基于在产品名称上也是如此,这是一种不受欢迎的行为。
那我应该怎么处理这个问题呢?
注:我用的是PostgreSQL
你可以把
max(pname)
在 SELECT
列表中。那是一个聚合,所以它会很好。
您可以将查询表述为:
SELECT s.sid, s.sname, MAX(p.pname) as pname
FROM Product p JOIN
Supplier s
ON p.sid = s.sid
GROUP BY s.sid, s.sname
HAVING COUNT(*) = 1;
您不需要将 COUNT(*)
转换为整数。已经是整数了。
我有 tables:
Product(code (PK), pname, (....), sid (FK)),
Supplier(sid(PK), sname, (....))
作业是:
Find Suppliers that supply only one product. Display their name (
sname
) and product name (pname
).
在我看来这是一个 GROUP BY
问题,所以我使用了:
SELECT sid FROM
Product GROUP BY sid
HAVING CAST(COUNT(*) AS INTEGER) = 1;
此查询为我找到了 sid
只供应一种产品的列表,但现在我遇到了一个问题:
- 分配禁止任何形式的嵌套
SELECT
查询。 - 我写的查询结果只有一列。 (
sid
列) - 因此,我无法访问产品名称,因为它不在查询结果 table 中,如果我将其添加到
GROUP BY
语句中,则分组将基于在产品名称上也是如此,这是一种不受欢迎的行为。
那我应该怎么处理这个问题呢?
注:我用的是PostgreSQL
你可以把
max(pname)
在 SELECT
列表中。那是一个聚合,所以它会很好。
您可以将查询表述为:
SELECT s.sid, s.sname, MAX(p.pname) as pname
FROM Product p JOIN
Supplier s
ON p.sid = s.sid
GROUP BY s.sid, s.sname
HAVING COUNT(*) = 1;
您不需要将 COUNT(*)
转换为整数。已经是整数了。