2010-09-22 162 views
2
Select id,count(*) as totalX FROM my_table WHERE x_factor = 1 GROUP BY id 

结果集是否可以使用“聚合和组合两个查询”组合(结果集)?

id  totalX 
--------- -------------- 
     9    34 
     10    6 
     11    21 
     12    3 
Select id,count(*) as totalY FROM my_table WHERE y_factor = 1 GROUP BY id 

结果集2:

id  totalY 
--------- -------------- 
     9    334 
     10    56 
     11    251 
     12    93 

有没有一种方法,我可以做到这一点:

id  totalX  totalY   
--------- -------------- -------------- 
     9    34    334 
     10    6    56 
     11    21    251 
     12    3    93 

我想为Sybase 12.5的解决方案在RHEL 5,我也想知道这是否可能在任何其他数据库系统。

---谢谢你的答案(S) - 基于真/假的,你可以在这两个

Comparing EXECUTION TIME: (For a certain query) 
Query 1: 
Execution Time 61. 
SQL Server cpu time: 6100 ms. SQL Server elapsed time: 12133 ms. 

Query 2: 
Execution Time 53. 
SQL Server cpu time: 5300 ms. SQL Server elapsed time: 12090 ms. 

Query X(1+2): 
Execution Time 84. 
SQL Server cpu time: 8400 ms. SQL Server elapsed time: 21456 ms. 

回答

4

通过使用CASE/WHEN为列,总结1或0同样的查询......此外,你可以做同样的事情,如果你想在另一列中的某些值的总和......刚刚替补,对于真正的价值,而不是1

select 
     id, 
     sum(CASE WHEN x_factor = 1 THEN 1 ELSE 0 END) as X_Count, 
     sum(CASE WHEN y_factor = 1 THEN 1 ELSE 0 END) as Y_Count 
    from 
     yourTable 
    group by 
     id 
+0

啊..天才为什么我没有想到这一点:)谢谢。我编辑了我的问题与执行时间,如果有人关心 – Stewie 2010-09-22 16:35:36

1

这应该工作:

SELECT id, 
     sum(case when x_factor = 1 then 1 else 0 end) as totalX, 
     sum(case when y_factor = 1 then 1 else 0 end) as totalY 
    FROM my_table 
    WHERE x_factor = 1 
     OR y_factor = 1 
    GROUP BY id 
+0

谢谢..它的工作原理 – Stewie 2010-09-22 16:36:49

1

CASE ... {0 | 1}对于人们来说是一个很好的窍门,但我认为这个问题可能比这更简单。您是否尝试过:

SELECT id, COUNT(x_factor) AS count_x, COUNT(y_factor) AS count_y FROM my_table GROUP BY id