1

単純な左結合クエリを使用して、2 つの別々のテーブルから 2 行のデータを取得しています。どちらも名前付きの共通の列を保持しdomainており、この列でそれらを結合して、1 つのテーブルの訪問数と他のテーブルの収益に基づいて値を計算します。

SELECT t1.`domain` AS `domain`,
       (SUM(earnings)/SUM(visits)) AS `rpv` 
FROM   hat_adsense_stats t1 
LEFT JOIN hat_analytics_stats t4 ON t4.`domain`=t1.`domain`  
WHERE(t1.`hat_analytics_id`='91' OR t1.`hat_analytics_id`='92') 
       AND t1.`date`>='2013-02-18' 
       AND t4.`date`>='2013-02-18' 
GROUP BY t1.`domain` 
ORDER BY rpv DESC 
LIMIT 10;

これは私が実行したクエリで、実行に 9.060 秒かかります。

hat_adsense_statsテーブルには 60887 レコードが含まれていますhat_analytics_statsテーブルには 190780 レコードが含まれています

しかし、グループ化するdomainと、比較が必要な 186 行のデータが返されます。

非効率的なコードまたはこれを解決するためのより良い方法に関する提案をいただければ幸いです。

4

3 に答える 3

1

ドアを開けてくれた raheel に感謝します。これが最終的に機能し、実行時間は 0.051 秒でした。:)

SELECT 
    t1.`domain` AS `domain`, 
    SUM(earnings)/visits AS `rpv` 
FROM hat_adsense_stats t1 
    INNER JOIN (SELECT 
        domain, 
        SUM(visits) AS visits 
        FROM hat_analytics_stats 
        WHERE `date` >= "2013-02-18" 
        GROUP BY domain) AS t4 
    ON t4.domain = t1.domain  
WHERE t1.`hat_analytics_id` IN('91','92') 
AND t1.`date`>='2013-02-18' 
GROUP BY t1.`domain` 
ORDER BY rpv DESC 
LIMIT 10
于 2013-03-18T10:08:51.233 に答える
0

結合の右側からアイテムの値を確認するため、LEFT JOIN は不要です。INNER JOIN はここでも同様に機能し、より高速になる可能性があります

于 2013-03-18T09:11:42.890 に答える