2012-06-05 16 views
0

如何合并由两个SELECT语句返回的列以提供其元素智商?SQL中两列的元素智商

查询1:

SELECT COUNT(*) AS count 
FROM table1 
WHERE col2 = 1 AND col3 > 5 
GROUP BY col4 
ORDER BY col4 

查询2:

SELECT COUNT(*) AS count 
FROM table1 
WHERE col2 = 1 
GROUP BY col4 
ORDER BY col4 

所以,如果他们返回类似:

Query 1  Query 2 
count   count 
----------------------- 
1    5 
2    4 

我会得到:

quotient 
------- 
0.2 
0.5 
+1

如果它们返回不同数量的记录会怎么样?事实上,由于其限制性更强的过滤标准,查询1可能会比查询2返回更少的记录。另外,由于两个查询都不适用排序,因此两个结果集中的记录应该如何匹配? – eggyal

+0

坚持;你会得到1或NULL,不是,这取决于行的col3值是否大于5.如果是,结果是1(因为col1/col1 = 1),如果不是,那么你除以NULL。你能否用完整的(3列)示例数据来澄清你的问题,并解释哪些位与哪些位结合在一起? –

+0

是共享可连接的列的表格吗?这是一个非常模糊的问题,与你的代表点的人... –

回答

1

对于问题的4列版本,我们可以假定商是在col4中具有相同值的组之间。所以,答案就:

SELECT col4, SUM(CASE WHEN col3 > 5 THEN 1 ELSE 0 END)/COUNT(*) AS quotient 
    FROM table1 
WHERE col2 = 1 
GROUP BY col4; 

我在输出保留col4因为我不觉得比(商)会是有用的东西没有确定哪些商数与值相关联,虽然从理论上说,答案不希望输出中的该列。

+0

(几乎)完美,谢谢!只需要确保它不是一个整数部分,它的工作。 – tskuzzy

+0

如果它是一个整数除法,那么你只需要将一个(或两个)聚合物投射到FLOAT,然后你就会回家并干燥。 –

1

如果您的实际查询不能被简化为每其他的答案,你可以加入子查询,像这样:

select j1.count/j2.count as quotient 
from (
    SELECT col4, COUNT(*) AS count 
    FROM table1 
    WHERE col2 = 1 AND col3 > 5 
    GROUP BY col4  
) j1 
join (
    SELECT col4, COUNT(*) AS count 
    FROM table1 
    WHERE col2 = 1 
    GROUP BY col4 
) j2 on j1.col4=j2.col4 
1

在这种情况下,你并不需要在所有两个单独的查询:

SELECT SUM(col3 > 5)/COUNT(*) 
FROM  table1 
WHERE col2 = 1 
GROUP BY col4 
ORDER BY col4 
+0

我理解这里的逻辑,但是我得到了一个语法错误:'语法错误'>'' – tskuzzy