繁体   English   中英

SQL在单个查询中为多个列选择COUNT

[英]SQL Select COUNT for Multiple Columns in a Single Query

下午好,

我对SQL比较陌生,并且只掌握该语言的工作知识,但我的任务是创建一个表,该表提供了我在另一个表中使用的一组数据的摘要。 具体来说,我正在使用一个看起来像这样的表(对表的格式化道歉,因为我无法使其垂直显示):

表格1

Col1:a,b,c,d,a,d,b

Col2:狗,猫,狗,猫,马,鸟,猫

并且,我想使用SELECT COUNT在一列中输出“a”的唯一出现次数,然后在第二列中输出“dog”的唯一出现次数(它们在我们所处的环境中不相互依赖)重新工作)。 新的汇总表如下所示:

Col1(“a”的数量):2

Col2(“狗的数量”):2

我的select语句看起来像这样:

SELECT COUNT (Col1) as '# of a' FROM "Table 1" WHERE Col1 = 'a' 

这是第二栏:

SELECT COUNT (Col2) as '# of dogs' FROM "Table 1" WHERE Col2 = 'dog'

如何组合两个SELECT COUNT查询以获取所需的表?

谢谢!

Wyattburp86

如果你的sql平台支持CASE语句,你可以这样做。

SELECT SUM(CASE WHEN Col1 = 'a' THEN 1 ELSE 0 END) as '# of a'
    ,  SUM(CASE WHEN Col2 = 'dog' THEN 1 ELSE 0 END) as '# of dogs'
FROM "Table 1"

上面的查询使用SUM而不是COUNT ,内部表达式返回0或1,具体取决于条件是否计算为false或true。

如果您对要求有任何控制权,请更改它们。 SQL不是按照您需要的方式将行转换为列的。 可以做到。 你可能不应该

最好的选择是运行两个不同的查询。 这些都将被优化并快速运行,然后在您的软件中,您可以找出如何处理这两个结果。

下一个最佳选择:

SELECT SUM(IF(col1='a',1,0)) AS a, SUM(IF(col2='dog',1,0)) AS dog

(你的问题没有标记特定的数据库引擎,所以我在这里使用了MySQL特定的解决方案,主要是因为它似乎最容易被读为伪代码。如果你使用的是不同的RDBMS,代码看起来会有所不同,但会跟随相同的基本模式。)

可以将两个选择组合作为另一个选择中的项目。 不优雅,但易于实施。

Select
  cntA     = (SELECT COUNT (Col1) as '# of a' FROM "Table 1" WHERE Col1 = 'a' )
, cntDog   = (SELECT COUNT (Col2) as '# of dogs' FROM "Table 1" WHERE Col2 = 'dog')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM