SQL - Where子句的计数

4
我有一个非常简单的SQL问题。我有一张包含以下列的数据库表:
  1. 零件号

  2. 销售类型(为简单起见,称其为Sales Type 1,2,3,4,5)

我希望编写一个查询,显示以下三列:
  • 零件号
  • Sales Type=2的销售总量
  • Sales Type≠2的销售总量
我可以轻松通过类似下面的代码获得其中两列,但是我不知道如何同时显示所有三列。
SELECT 
    PartNumber AS PartNumber,
    COUNT(*) AS SalesCount
FROM 
    SalesTable
WHERE 
    SalesType = 2
GROUP BY 
    I.PartNumber

我猜这可能很容易 - 我是一个SQL新手,这是我的第一篇帖子!
非常感谢您的任何帮助!

在select语句中没有and。所以你测试过你的查询了吗? - Lee
你缺少GROUP BY。 - Branko Dimitrijevic
刚刚编辑过,应该是“AS”。我为了这个问题简化了示例,所以不能完全测试我的代码。你知道怎样显示我所期望的三列吗? - Zak Fischer
如果我使用GROUP BY,那么结果不会只有三列,对吧? - Zak Fischer
COUNT函数在没有GROUP BY子句的情况下无法正常工作(除了MySQL,它也不能正常工作,但你看不到明显的错误提示)。 - Branko Dimitrijevic
4个回答

2

听起来你要找的是一个条件计数

SELECT 
    PartNumber, 
    SUM(CASE WHEN SalesType = 2 THEN 1 ELSE 0 END) as SaleTypeTwoCount,
    SUM(CASE WHEN SalesType <> 2 THEN 1 ELSE 0 END) as SalesOtherCount
FROM 
    SalesTable
GROUP BY
    PartNumber

1
未经测试,但您想要类似于这样的东西:


 SELECT PartNumber, sum(case when SalesType=2 then 1 else 0) as Type2SalesCount,
    sum(case when SalesType<>2 then 1 else 0) as NoNType2SalesCount
    FROM SalesTable
    Group by PartNumber

太好了 - 谢谢!!! 这就是我想要的(我确实不得不添加一个END ... else 0 END)。但这正是我在寻找的 --- 非常感谢你!! - Zak Fischer

0
“我还没有实际运行它,但是类似这样的代码应该可以工作…”
SELECT
    PartNumber,
    COUNT(CASE WHEN SalesType = 2 THEN 1 END) Count2,
    COUNT(CASE WHEN SalesType <> 2 THEN 1 END) CountNot2
FROM
   SalesTable
GROUP BY
   PartNumber;

请注意,COUNT(expression)仅计算非NULL值,而COUNT(*)计算所有行。

...

CASE WHEN SalesType = 2 THEN 1 END

...等同于...

CASE WHEN SalesType = 2 THEN 1 ELSE NULL END

...并且当SalesType <> 2时将返回NULL,不会被计算。


0
你可以使用 case 语句,例如: saletype = case when saletype == 2 then count(saletype) when saletype <> 2 then count(saletype)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接