合并两个select语句以返回一个结果

时间:2010-05-07 18:48:58

标签: mysql mysql-python

我需要将来自两个视图表的两个选择查询的结果组合起来,我正在从中执行计算。也许有一种更简单的方法来使用if ... else - 任何指针来执行查询?

基本上我需要在sql查询1的条件下用'ar.time_ratio'来划分所有内容,并忽略查询2中的内容。

SELECT 
gs.traffic_date,
gs.domain_group,
gs.clicks/ar.time_ratio as 'Scaled_clicks',
gs.visitors/ar.time_ratio as 'scaled_visitors',
gs.revenue/ar.time_ratio as 'scaled_revenue',
(gs.revenue/gs.clicks)/ar.time_ratio as 'scaled_average_cpc',
(gs.clicks)/(gs.visitors)/ar.time_ratio as 'scaled_ctr',
gs.average_rpm/ar.time_ratio as 'scaled_rpm',
(((gs.revenue)/(gs.visitors))/ar.time_ratio)*1000 as "Ecpm"
FROM
group_stats gs, 
v_active_ratio ar

WHERE ar.group_id=gs.domain_group

SELECT 
gs.traffic_date,
gs.domain_group,
gs.clicks,
gs.visitors,
gs.revenue,
(gs.revenue/gs.clicks) as 'average_cpc',
(gs.clicks)/(gs.visitors) as 'average_ctr',
gs.average_rpm,
((gs.revenue)/(gs.visitors))*1000 as "Ecpm"
FROM
group_stats gs, 
v_active_ratio ar

where not ar.group_id=gs.domain_group

3 个答案:

答案 0 :(得分:6)

使用UNION运算符。您可以添加另一列来显示哪一行来自哪个查询,如果这对您很重要。

http://dev.mysql.com/doc/refman/5.1/en/union.html

答案 1 :(得分:3)

这通常是UNION [ALL]的用途。

答案 2 :(得分:1)

上面建议的UNION会将所有缩放结果和所有非缩放数据(第二个查询)作为单独的行。

如果您想将它们分组到他们的公共数据上,那么您可以在同一行上并排显示缩放和普通数据,您可以使用如下查询:

   SELECT * FROM ( [first-query] ) AS scaled
    INNER JOIN ( [second-query] ) AS normal
    ON scaled.traffic_date=normal.traffic_date 
       AND scaled.domain_group=normal.domain_group

而不是使用*来选择所有列,可能希望显式声明所选列,因为traffice_date和domain_group列将输出两次。