【问题标题】:combining two select statements to return one result组合两个 select 语句以返回一个结果
【发布时间】:2011-02-16 23:16:32
【问题描述】:

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

【问题讨论】:

    标签: mysql mysql-python


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2011-02-19
          • 2015-08-30
          • 2019-12-23
          • 2012-05-19
          • 2011-08-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多