2017-11-18 1 views
0

Diese Abfrage:Wie bearbeitet man diese MySQL-Abfrage, um eine zusätzliche Spalte mit count und avg einzuschließen?

select p.visitor_id , p.url, avg(p.duration), count(*) as sum_pages 
from pages p 
where visitor_id = 1 
group by p.visitor_id , p.url 
having avg(p.duration) > (select avg(p2.duration) 
          from pages p2 
          where p2.visitor_id = p.visitor_id 
         ); 

produziert diese hypothetische Tabelle:

visitor_id ---- url ---- duration --- sum_pages 
1 ------------ home ------- 5 ------- 20 
1 ------------ about ------ 8 ------- 12 
1 ------------ contact ---- 2 ------- 13 
1 ------------ services --- 2 ------- 18 

Was es ist: Nimmt die durchschnittliche Dauer Anzahl der gesamten Tabelle, und prüft, ob die durchschnittliche Dauer URL größer ist. Wenn ja, wird die Nummer angezeigt.

Ich möchte das gleiche tun und dieses Mal die Seitenaufrufe hinzufügen. Jede Zeile wird als Seitenaufruf gezählt.

Wie erreiche ich das?

+0

Wenn ich richtig verstehen Sie alle vistor_id + url Kombinationen, bei denen die Dauer> avg und Seitenaufrufe sind> Durchschnitt? Mit Durchschnitt meinen Sie den Gesamtdurchschnitt für eine Person? – PatrickSJ

+0

Können Sie * und dieses Mal die Seitenaufrufe * im Detail hinzufügen? –

+0

https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-y-simple-sql-query – Yunnosch

Antwort

0

fand ich einen Weg, dies zu erreichen, sondern um die Leistung der Abfrage nicht sicher:

select 
visitor_id, 
url, 
sum(duration), 
avg(duration), 
count(*) as sum_pages 
from pages p 
where visitor_id='1' 
group by visitor_id,url 
having sum(duration) > (select avg(duration) 
         from pages 
         where visitor_id=p.visitor_id 
         ) 
and sum_pages > (select count(*)/(select count(distinct url) from pages where visitor_id=p1.visitor_id) 
        from pages p1 
        where p1.visitor_id=p.visitor_id 
       ) 
;  

DEMO

+0

es scheint, dass Sie es geschafft haben zu arbeiten! aber es fehlt an Leistung. Gibt es eine Möglichkeit, es zu beschleunigen? – EnexoOnoma

+0

Ich glaube nicht. Weil, um avg pageviews zu berechnen, benötigt es 3 verschiedene Zählungen, die Sie nirgendwo in Ihrer tatsächlichen Tabelle speichern. –

+0

ok dann ... kannst du mir bitte die Logik auf deinem Code erklären? – EnexoOnoma

Verwandte Themen