繁体   English   中英

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

[英]combining two select statements to return one result

我需要合并两个视图表中两个选择查询的结果,并根据它们执行计算。 也许有一种使用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

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

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

通常这就是UNION [ALL]的目的。

上面建议的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将被输出两次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM