簡體   English   中英

帶有選擇的 MySQL Where 子句

[英]MySQL Where-clause with select

我有一個包含三列的表: visitationscountryuser_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM