SQL 计算两个表
SQL count across two tables
我想 return 基础 table 中库存超过一定数量的行。
类似这样,但是有困难...
SELECT b
FROM Base b, Inventory i
WHERE COUNT(b.brand = i.brand) > 2
这应该是 returned:
brand | model |
----------------
ford | T |
chevy | X |
.
Base
----------------
brand | model |
----------------
toyota | R |
ford | T |
chevy | X |
.
Inventory
---------
brand |
---------
toyota |
ford |
ford |
ford |
toyota |
chevy |
chevy |
chevy |
编辑历史记录
- 我更新了基础 table 以包括更多需要的行
使用 group by
和 having
子句过滤具有 count >2
的 brand
试试这个。
select * from base b where exists(SELECT 1
FROM Inventory i
where b.brand=i.brand
group by brand
having COUNT(1) > 2 )
您可以使用GROUP BY
对记录进行分组并使用HAVING
过滤组,如下所示:
SELECT b.brand, b.model
FROM Base b
JOIN Inventory i
ON b.brand = i.brand
GROUP BY b.brand, b.model
HAVING COUNT(i.brand) > 2
根据您的查询,您似乎正在尝试进行连接,然后进行计数。
类似于:
SELECT *
FROM Base b
INNER JOIN Inventory I
ON (b.brand = i.brand)
GROUP BY i.brand
HAVING COUNT(i.brand) > 2
另一种方法(我能想到)是使用嵌套的 select:
SELECT *
FROM Base
WHERE brand IN (
SELECT brand
FROM Inventory
GROUP BY brand
HAVING COUNT(*) > 2
)
只需 GROUP BY
with an HAVING
即可。
你可以这样做:
SELECT b.*
FROM Inventory i
INNER JOIN base b
ON b.brand = i.brand
GROUP BY i.brand
HAVING COUNT(i.brand) > 2
| BRAND | MODEL |
|-------|-------|
| chevy | X |
| ford | T |
我想 return 基础 table 中库存超过一定数量的行。
类似这样,但是有困难...
SELECT b
FROM Base b, Inventory i
WHERE COUNT(b.brand = i.brand) > 2
这应该是 returned:
brand | model |
----------------
ford | T |
chevy | X |
.
Base
----------------
brand | model |
----------------
toyota | R |
ford | T |
chevy | X |
.
Inventory
---------
brand |
---------
toyota |
ford |
ford |
ford |
toyota |
chevy |
chevy |
chevy |
编辑历史记录
- 我更新了基础 table 以包括更多需要的行
使用 group by
和 having
子句过滤具有 count >2
的 brand
试试这个。
select * from base b where exists(SELECT 1
FROM Inventory i
where b.brand=i.brand
group by brand
having COUNT(1) > 2 )
您可以使用GROUP BY
对记录进行分组并使用HAVING
过滤组,如下所示:
SELECT b.brand, b.model
FROM Base b
JOIN Inventory i
ON b.brand = i.brand
GROUP BY b.brand, b.model
HAVING COUNT(i.brand) > 2
根据您的查询,您似乎正在尝试进行连接,然后进行计数。
类似于:
SELECT *
FROM Base b
INNER JOIN Inventory I
ON (b.brand = i.brand)
GROUP BY i.brand
HAVING COUNT(i.brand) > 2
另一种方法(我能想到)是使用嵌套的 select:
SELECT *
FROM Base
WHERE brand IN (
SELECT brand
FROM Inventory
GROUP BY brand
HAVING COUNT(*) > 2
)
只需 GROUP BY
with an HAVING
即可。
你可以这样做:
SELECT b.*
FROM Inventory i
INNER JOIN base b
ON b.brand = i.brand
GROUP BY i.brand
HAVING COUNT(i.brand) > 2
| BRAND | MODEL |
|-------|-------|
| chevy | X |
| ford | T |