2017-01-17 21 views
0
SELECT numTimesIndexLoaded, numTimesIndexLoadedUnique, numTimesResultsLoaded, numTimesResultsLoadedUnique, numTimesCTALoaded, numTimesCTALoadedUnique 
FROM 
(SELECT 
sum(ctaSL.page = 'index') AS numTimesIndexLoaded, 
sum(ctaSL.page = 'results') AS numTimesResultsLoaded, 
sum(ctaSL.page = 'cta') AS numTimesCTALoaded, 
count(distinct ctaSL.ip_address, ctaSL.page = 'index') AS numTimesIndexLoadedUnique, 
count(distinct ctaSL.ip_address, ctaSL.page = 'results') AS numTimesResultsLoadedUnique, 
count(distinct ctaSL.ip_address, ctaSL.page = 'cta') AS numTimesCTALoadedUnique 
FROM 
stats_page_loads AS ctaSL 
WHERE ctaSL.campaign_id = ? 
    AND ctaSL.mode = ? 
) t1 

私はWebページの統計情報を取得しようとしています。目標は、3つのページのそれぞれが何回ロードされたかという統計情報と、3つのページのそれぞれについて一意のIPアドレスによって何回ロードされたかを示すことです。私は別物を使用することに新しいので、使用するのが適切かどうかは確かではありませんが、私はそれが間違って使用していると仮定しているので、私は適切な結果を得ていません。MySQL:複数の列から一意の数を取得する

もう1つのSELECT文をt2として作成することができましたが、それを避けるためには?変数を何度も何度も繰り返していくと、できるだけそれを1つに凝縮させたいと考えていました。

+1

良いSQL関連の質問をするには、次のガイダンスを参照してください。http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to- me-to-be-a-very-simple-sql-query stansdというこの質問は、キーがデータ内にあるため、答えられません。 – Shadow

+0

ヒントとして、[GROUP BY](https://dev.mysql.com/doc/refman/5.5/en/group-by-handling.html) –

答えて

1

試してみてください。他の例について

count(DISTINCT CASE WHEN ctaSL.page = 'index' THEN ctaSL.ip_address END) AS numTimesIndexLoadedUnique, 

と同様。これは、WHEN句のいずれも一致していない場合は、がNULLを返し、COUNTが一致しないため、NULLとカウントされます。テストは単に、彼らが成功するかどうかに応じて0または1を返し、あなただけのIPおよびそのブールのすべての異なる組み合わせをカウントしているので、

あなたの試みはうまくいきませんでした。条件が失敗した行は除外されません。

+0

について読んで始めてください。これは完全に機能し、ありがとう説明のために。非常に役立ちます。 –

関連する問題