1

計算を実行している 2 つのビュー テーブルからの 2 つの選択クエリの結果を組み合わせる必要があります。おそらく、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提案では、すべてのスケーリングされた結果と、スケーリングされていないすべてのデータ (2 番目のクエリ) が別々の行として表示されます。

それらを共通のデータでグループ化して、スケーリングされたデータと通常のデータを同じ行に並べて表示する場合は、次のようなクエリを使用できます。

   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 が 2 回出力されるため、選択された列を明示的に宣言することをお勧めします。

于 2010-05-07T19:08:36.967 に答える