1

我需要组合来自两个视图表的两个选择查询的结果,我正在从中执行计算。也许有一种更简单的方法可以使用 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
4

3 回答 3

6

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

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

于 2010-05-07T18:52:36.727 回答
3

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

于 2010-05-07T18:51:49.857 回答
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 列将被输出两次。

于 2010-05-07T19:08:36.967 回答