首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个查询中多列的SQL选择计数

一个查询中多列的SQL选择计数
EN

Stack Overflow用户
提问于 2018-08-03 16:52:11
回答 3查看 8.8K关注 0票数 1

我对SQL还比较陌生,对这种语言只掌握一些有用的知识,但我的任务是创建一个表,该表提供了我在另一个表中处理的一组数据的摘要。具体来说,我正在处理一个类似于这样的表(对于表的格式表示歉意,因为我无法让它垂直正确地显示):

表1

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

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

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

Col1 (“a”#):2

Col2 (“狗#”):2

我的select语句如下所示:

代码语言:javascript
复制
SELECT COUNT (Col1) as '# of a' FROM "Table 1" WHERE Col1 = 'a' 

这是第二栏:

代码语言:javascript
复制
SELECT COUNT (Col2) as '# of dogs' FROM "Table 1" WHERE Col2 = 'dog'

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-03 16:55:40

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

代码语言:javascript
复制
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。

票数 4
EN

Stack Overflow用户

发布于 2018-08-03 16:57:37

可以将两个select合并为另一个select中的项。不优雅,但易于实现。

代码语言:javascript
复制
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')
票数 1
EN

Stack Overflow用户

发布于 2018-08-03 16:56:59

如果您对需求有任何控制,请更改它们。SQL的设计并不是为了按照这里所需的方式将行转换为列。你可以的。你可能就是不应该。

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

其次是最好的选择:

代码语言:javascript
复制
SELECT SUM(IF(col1='a',1,0)) AS a, SUM(IF(col2='dog',1,0)) AS dog

(您的问题没有标记特定的数据库引擎,所以我在这里使用了一个MySQL特定的解决方案,主要是因为它看起来很容易读成伪代码。如果您使用的是不同的RDBMS,代码看起来会不一样,但将遵循相同的基本模式。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51677040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档