首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL:如何将来自多个表的计数结果组合成多个列

SQL:如何将来自多个表的计数结果组合成多个列
EN

Stack Overflow用户
提问于 2017-04-08 21:43:51
回答 1查看 1.8K关注 0票数 2

我有两个表,它们的结构是相同的,但我真正想要的是从每一行到多列结果集中的独立计数。

我不断地收到语法错误,但是到目前为止还没有能够获得传递我想要的数据并通过解析器实现数据的东西。我试图找出这是否是SQL问题(考虑到我使用的是网站的实现,而不是原生的MySQl/SQL/Oracle)还是me问题(更有可能)。

因此,我想要的是两个不相关的(非主键)表,将一个计数(不同的列)返回到一个结果中。我尝试过几种不同的方法:

代码语言:javascript
复制
select 1,2 FROM
    (SELECT COUNT(DISTINCT col1) as 1 from table1),
    (SELECT COUNT(DISTINCT col2) as 2 from table2)
代码语言:javascript
复制
SELECT *
FROM (
    SELECT COUNT(DISTINCT col1) AS 1
    FROM table1 
    )
CROSS JOIN (
    SELECT COUNT(DISTINCT col2) AS 2
    FROM table2
    )

我还乱搞了4-5种不同用途的union财政报告( union all ),但都没有用。好奇那些在SQL艺术方面受过更多教育的人可能会有什么想法。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-08 21:50:41

根据您所在的数据库RDBM,有几件事情可能会在语法上发生变化。在ANSI Sql定义中,您的查询应该是:

代码语言:javascript
复制
select col1, col2 FROM
    (SELECT COUNT(DISTINCT col1) as col1 from table1) as tab1,
    (SELECT COUNT(DISTINCT col2) as col22 from table2) as tab2

您必须为alias添加的所有子查询。也用单词来命名你的专栏,而不是用数字来命名,这样更容易理解。不过,我不记得在SQL中是否不允许数字作为别名。

没有子查询的别名,您可以这样使用:

代码语言:javascript
复制
-- For MySql, PostgreSql, SQL Server (not sure though)
select (SELECT COUNT(DISTINCT col1)
          from table1) as col1,
       (SELECT COUNT(DISTINCT col2) as col22 
          from table2) as col2

-- For Oracle
select (SELECT COUNT(DISTINCT col1)
          from table1) as col1,
       (SELECT COUNT(DISTINCT col2) as col22 
          from table2) as col2
  from dual

-- For DB2
select (SELECT COUNT(DISTINCT col1)
          from table1) as col1,
       (SELECT COUNT(DISTINCT col2) as col22 
          from table2) as col2
  from sysibm.sysdummy1

附带注意:如果您用双引号(这是SQL,可以在任何地方工作)包围数字,可以使用数字作为别名,如下所示:

代码语言:javascript
复制
select "1", "2" FROM
    (SELECT COUNT(DISTINCT col1) as "1" from table1) a, --don't forget the table alias
    (SELECT COUNT(DISTINCT col2) as "2" from table2) b

Mysql还允许您使用倒计时:

代码语言:javascript
复制
select `1`, `2` FROM
    (SELECT COUNT(DISTINCT col1) as `1` from table1) a,
    (SELECT COUNT(DISTINCT col2) as `2` from table2) b
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43300665

复制
相关文章

相似问题

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