![](/img/trans.png)
[英]MySQL SELECT in SELECT-clause or in WHERE-clause in order to filter further
[英]MySQL Where-clause with select
我有一個包含三列的表: visitations
、 country
和user_id
。 我有一個查詢來檢索每個國家/地區的所有訪問者數量和每個國家/地區的重新訪問者數量。 現在,我想更改我的查詢,以便獲得每個國家/地區的再訪問者數量和比率(再訪問者/所有訪問者)。 剛學MySQL,感覺不知道有什么工具可以選擇所有訪問者和重訪者,然后按比例使用。 有沒有辦法在一個查詢中做到這一點? 有人可以幫我解決這個問題嗎? 謝謝!
這是我對所有訪問者的查詢(如果刪除了 # 則是重新訪問者)
SELECT sum(Visitations) AS "Amount", country
FROM E91
#WHERE Visitations > 1
GROUP BY Country
ORDER BY `Amount` DESC
數據樣本,如果訪問量高於 1,則用戶是重訪者:
user_id | country | visitations
---------|--------------|---------------
beth123 | Germany | 4
david78 | USA | 2
matt23 | UK | 1
...
where 子句開始過濾記錄,而忽略您想要計入總數的記錄。 要計算重訪者,您可以使用CASE WHEN... END
:
SELECT
sum(Visitations) AS "Amount",
sum(CASE WHEN Visitations > 1 THEN 1 ELSE 0 END) as "Re-Visitors",
country
FROM E91
GROUP BY Country
ORDER BY `Amount` DESC
為了進一步使用,您可以執行以下操作:
SELECT
sum(Visitations) AS "Amount",
sum(CASE WHEN Visitations > 1 THEN 1 ELSE 0 END) as "Re-Visitors",
sum(CASE WHEN Visitations > 1 THEN 1 ELSE 0 END) / sum(Visitations) as "X",
country
FROM E91
GROUP BY Country
ORDER BY `Amount` DESC
或者:
SELECT Amount, Re-visitors, "Re-visitors"/Amount, country
FROM (
SELECT
sum(Visitations) AS "Amount",
sum(CASE WHEN Visitations > 1 THEN 1 ELSE 0 END) as "Re-Visitors",
country
FROM E91
GROUP BY Country
ORDER BY `Amount` DESC
) x
訪問量和再訪問量與列visitations
量之和無關。
你可以得到(所有游客數量user_id
通過計數數s誰訪問過的國家) user_id
為各S- country
和再訪問者的計數次數的數量user_id
對各S- country
當列visitations
大於1
:
SELECT country,
SUM(visitations > 1) AS revisitors,
COUNT(*) AS visitors,
AVG(visitations > 1) AS ratio
FROM E91
GROUP BY Country
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.