2017-12-03 15 views
0

このクエリを簡略化するにはどうすればよいですか?このクエリを簡略化できますか? 結合を試みましたが、結果は以下のこのクエリと同じではありませんでした。 いくつかの洞察を教えてください。クエリを簡略化する方法

SELECT trafficbywebsite.`adwordsCampaignID`, 
trafficbywebsite.adwordsAdGroupID, trafficbywebsite.adPlacementDomain, 
trafficbywebsite.counts traffic, convertedtrafficbywebsite.counts 
convertedclicks 
FROM 
    (
     SELECT `adwordsAdGroupID`, `adPlacementDomain`, COUNT(*) counts 
     FROM 
      (
       SELECT GA_entrances.* 
       FROM 
        GA_entrances, 
        GA_conversions 
        WHERE 
        GA_entrances.clientId=GA_conversions.clientId 
        AND (eventLabel='myurl' OR eventLabel='myotherurl') 
       AND YEAR(GA_entrances.timestamp)>=2016 
       AND MONTH(GA_entrances.timestamp)>=6 
       AND YEAR(GA_conversions.timestamp)>=2016 
       AND MONTH(GA_conversions.timestamp)>=6     
       GROUP BY GA_entrances.clientId 
       ) clickers 
       GROUP BY `adwordsAdGroupID`, `adPlacementDomain` 
     ) convertedtrafficbywebsite 
     ,(
     SELECT `adwordsCampaignID`, `adwordsAdGroupID`, adPlacementDomain, 
     COUNT(*) counts 
     FROM 
     GA_entrances 
     WHERE 
     YEAR(timestamp)>=2016 
     AND MONTH(timestamp)>=6 
    GROUP BY `adwordsAdGroupID`, `adPlacementDomain` 
    ) trafficbywebsite 
    WHERE 
    convertedtrafficbywebsite.counts>=(trafficbywebsite.counts/10) 
    ORDER BY traffic DESC 

答えて

2

サンプルデータがないとわかりにくいですが、サブクエリの1つを削除することはできません。しかし、あなたが行うことができるのは、あなたがその日のために奉仕する方法を改善することです。回避すべきことは、フィルタ基準に合わせてデータ上の関数を使用することです。たとえば、2016年6月1日以降のデータ、つまり1つの日付が必要ですが、1年と1か月に一致するすべてのデータ行を修正しています。

AND YEAR(GA_entrances.timestamp) >= 2016 
AND MONTH(GA_entrances.timestamp) >= 6 
AND YEAR(GA_conversions.timestamp) >= 2016 
AND MONTH(GA_conversions.timestamp) >= 6 
; 

あり、これらすべての機能は必要なく、単に単一の日付を比較します。

AND GA_entrances.timestamp) >= '2016-06-01' 
AND GA_conversions.timestamp >= '2016-06-01' 
; 

回避するために、他の事は、テーブルを結合する方法としてコンマを使用しています。これは25年以上前のANSI標準構文です。

GA_entrances.* 
    FROM GA_entrances 
    INNER JOIN GA_conversions ON GA_entrances.clientId = GA_conversions.clientId 
:これは、ベストプラクティスと考えている

FROM GA_entrances, GA_conversions 
    WHERE GA_entrances.clientId = GA_conversions.clientId 

:これは参加のアンティークな方法です

関連する問題