SQL查询记录总数

SQL查询记录总数

问题描述:

我真的很困扰这个查询。我有两张桌子,一张是“用户”,一张是“订单”。 “用户”具有“user_id”字段,“orders”也具有“user_id”字段。SQL查询记录总数

我需要知道“订单”表中有0条记录的用户的总记录。换句话说,如果我在“users”表中注册了1000个用户,那么有多少人从未在网站上下过订单。

我试图来像这样的东西,但当然这是不正确的:

SELECT Count(u.user_id) as tRecs, o.orderid 
FROM users u 
    INNER JOIN orders o ON u.user_id = o.user_id 
+0

像'SELECT COUNT(*)U其中不存在(从订单选择 'X' O,其中o.user_id = u.user_id) “也许? – Tibrogargan

+0

看起来不错。让我玩这个。谢谢。 – Brasciole

+0

也许去Tanjim的答案 - 他们中的一个肯定会更有效率。也许他会解释 – Tibrogargan

您可以使用Left Join

SELECT COUNT(A.UserID) FROM Users A LEFT JOIN Orders B ON A.UserID = B.UserID WHERE B.UserID IS NULL 

Not Exists

SELECT COUNT(A.USERID) FROM Users A WHERE NOT EXISTS (SELECT UserID FROM Orders X WHERE X.UserID = A.UserID) 

Not In

SELECT COUNT(A.USERID) FROM Users A WHERE A.UserID NOT IN (SELECT UserID FROM Orders) 

根据你的DBMS的性能你想看到从用户这个What's the difference between NOT EXISTS vs. NOT IN vs. LEFT JOIN WHERE IS NULL?

+0

第二个你有别名错误(应该是在哪里X.UserID = A.UserID)。当Orders中的记录数超过某个数时,不会让多个DBMS中的最后一个出现问题? – Tibrogargan

+0

@Tibrogargan,你的意思是'不是'问题? – Esty

+1

是的。几个月前,我正在研究的一个项目试图在NOT NOT条件中放入超过* X *的值而被绊倒。可能还没有源于DBMS,尽管 – Tibrogargan