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  |

编辑历史记录

使用 group byhaving 子句过滤具有 count >2brand 试试这个。

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 即可。 你可以这样做:

SQL Fiddle

SELECT b.*
FROM Inventory i
INNER JOIN base b 
ON b.brand = i.brand
GROUP BY i.brand
HAVING COUNT(i.brand) > 2

Results:

| BRAND | MODEL |
|-------|-------|
| chevy |     X |
|  ford |     T |