SQL Server:将购买产品的COUNT列与UNSOLD产品进行比较

时间:2015-12-04 03:12:11

标签: sql sql-server sql-server-2008 count compare

如果我提出转储问题,我真的很抱歉,我正在尝试执行以下任务:"编写查询以仅列出从未有过的那些产品(p_id,p_name,cat_name)购买&#34。

我有两张桌子:

  • ProductCategory(p_id,p_name,cat_id,cat_name,cat_description)
  • CustomerPreference(cust_id,cust_name,pp_id(purchaseproduct),评级)

所以我尝试编写执行COUNT(p_id) FROM ProductCategoryCOUNT(pp_id) FROM CustomerPreference的查询,以便我可以比较它们并仅列出那些未售出的产品。

SELECT 
    PC.p_id, PC.p_name, PC.cat_name, COUNT(PC.p_id) AS no_of_purchases
FROM 
    ProductCategory PC, CustomerPreference CP
WHERE 
    PC.p_id = CP.pp_id
GROUP BY 
    PC.p_id, PC.p_name, PC.cat_name, PC.p_id
HAVING 
    COUNT(CP.pp_id) NOT IN COUNT(PC.p_id)
ORDER BY 
    no_of_purchases

我知道我的语法在这个查询中是错误的,但我希望你能看到我试图实现的逻辑,如果你能告诉我如何显示不是的产品列(p_id),我将不胜感激。出售。

2 个答案:

答案 0 :(得分:0)

要从一个表(ProductCategory)获取另一个表(CustomerPreference)中不存在的行,您可以使用NOT EXISTS

SELECT pc.*
FROM ProductCategory pc
WHERE 
    NOT EXISTS(
        SELECT 1 
        FROM CustomerPreference
        WHERE pp_id = pc.p_id
    )

答案 1 :(得分:0)

从未出现在CustomerPreference表中的产品将是:

SELECT PC.p_id, PC.p_name, PC.cat_name
FROM ProductCategory PC
LEFT JOIN CustomerPreference CP
ON PC.p_id = CP.pp_id
WHERE CP.pp_id IS NULL
ORDER BY PC.p_name