Mám mysql stôl s visitor_id, country, time_of_visit.
Chcem získať priemerné trvanie návštevy podľa krajiny.
Ak chcete získať trvanie, dostanem rozdiel medzi najskorším a najnovším časom_zobrazenia pre každý návštevník_id.
Takže mi to znamená priemerné trvanie všetkých návštev:
SELECT AVG(duration)
FROM
(
SELECT TIMESTAMPDIFF(SECOND, MIN(time_of_visit), MAX(time_of_visit))/60
as duration
FROM tracker
GROUP BY visitor_id
) as tracker
Funguje to. Ale zoskupiť ju podľa krajiny, zlyhám. Tu je môj posledný pokus získať priemerné trvanie podľa krajiny:
SELECT country, AVG(duration)
FROM
(
SELECT TIMESTAMPDIFF(SECOND, MIN(time_of_visit), MAX(time_of_visit))/60
as duration
FROM tracker
GROUP BY visitor_id
) as tracker
GROUP BY country
Chyba, ktorú mám, je: Neznámy stĺpec "krajina" v "zozname polí".
Myslím, že by to malo byť jednoduché, ale ja som noob, hľadal som veľa, skúsil veľa nápadov, ale nič dobré.
Vopred ďakujem.
odpovede:
0 pre odpoveď č. 1Musíte vybrať stĺpec krajiny v subdotáciách a potom musíte odkazovať na pole krajiny z odvodenej tabuľky tracker.country
SELECT tracker.country, AVG(tracker.duration)
FROM
(
SELECT TIMESTAMPDIFF(SECOND, MIN(time_of_visit), MAX(time_of_visit))/60
as duration ,country
FROM tracker
GROUP BY visitor_id
) as tracker
GROUP BY tracker.country
editovať
Použitím
GROUP BY
v subselectvisitor_id
vám dá záznam s duplicitnými údajmi pre krajiny a pri použitíGROUP BY
s obomavisitor_id,country
zoskupí údaje krajín v rámcirovnaký id návštevníka, toto bude možné iba v prípade, že jeden návštevník bude patriť viac než jedna krajina, ak jeden návštevník bude patriť iba k jednej krajine tj jeden-k-jeden vzťah potom len používaťGROUP BY visitor_id
0 pre odpoveď č. 2
Je potrebné zadať stĺpec v poddotazovaní, ktorý chcete zobraziť vo vonkajšom dopyte Skúste to::
SELECT country, AVG(duration)
FROM
(
SELECT TIMESTAMPDIFF(SECOND, MIN(time_of_visit), MAX(time_of_visit))/60
as duration, country
FROM tracker
GROUP BY visitor_id
) as tracker
GROUP BY country
Môžete tiež vyskúšať:
SELECT
country,
AVG(TIMESTAMPDIFF(SECOND, MIN(time_of_visit), MAX(time_of_visit))/60) as avgTime
FROM
GROUP BY visitor_id,country
0 pre odpoveď č. 3
Mali by ste pridať COUNTRY do vnútorného GROUP BY a zoznamu polí
SELECT country, AVG(duration)
FROM
(
SELECT TIMESTAMPDIFF(SECOND, MIN(time_of_visit), MAX(time_of_visit))/60
as duration,country,visitor_id
FROM tracker
GROUP BY visitor_id,country
) as tracker
GROUP BY country