我有两个表,它们的结构是相同的,但我真正想要的是从每一行到多列结果集中的独立计数。
我不断地收到语法错误,但是到目前为止还没有能够获得传递我想要的数据并通过解析器实现数据的东西。我试图找出这是否是SQL问题(考虑到我使用的是网站的实现,而不是原生的MySQl/SQL/Oracle)还是me问题(更有可能)。
因此,我想要的是两个不相关的(非主键)表,将一个计数(不同的列)返回到一个结果中。我尝试过几种不同的方法:
select 1,2 FROM
(SELECT COUNT(DISTINCT col1) as 1 from table1),
(SELECT COUNT(DISTINCT col2) as 2 from table2)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艺术方面受过更多教育的人可能会有什么想法。谢谢。
发布于 2017-04-08 21:50:41
根据您所在的数据库RDBM,有几件事情可能会在语法上发生变化。在ANSI Sql定义中,您的查询应该是:
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中是否不允许数字作为别名。
没有子查询的别名,您可以这样使用:
-- 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,可以在任何地方工作)包围数字,可以使用数字作为别名,如下所示:
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) bMysql还允许您使用倒计时:
select `1`, `2` FROM
(SELECT COUNT(DISTINCT col1) as `1` from table1) a,
(SELECT COUNT(DISTINCT col2) as `2` from table2) bhttps://stackoverflow.com/questions/43300665
复制相似问题