我有我网站的流量日志。
我想从 10% 的用户群中抽样流量。 但是数据库中的每条记录都是一次访问,每个客户可以有多次访问。只获得 10% 的流量是不正确的,因为 20% 的用户可能产生 80% 的流量。
表结构简单
user_id, page
如何在没有太多嵌套子查询的情况下从随机的 10% 的客户那里获取流量?
最佳答案
如果使用 MySQL 你可以试试:
/* Calculate 10% of the users, rounding up to account for values below 1 */
SET @limit = CEIL((SELECT COUNT(DISTINCT(user_id)) FROM TRAFFIC) / 10);
/* Prepare a statement for getting the traffic */
PREPARE STMT FROM 'SELECT *
FROM TRAFFIC T
INNER JOIN (
SELECT DISTINCT(user_id)
FROM TRAFFIC
LIMIT ?
) U
ON T.user_id = U.user_id';
/* Execute the statement using the pre-computed limit. */
EXECUTE STMT USING @limit;
这是 PostgreSQL 中的一个类似实现(基于反馈):
SELECT *
FROM TRAFFIC T
INNER JOIN (
SELECT DISTINCT user_id
FROM TRAFFIC
LIMIT CEIL((SELECT COUNT(DISTINCT user_id) FROM TRAFFIC) / 10)
) U
ON T.user_id = U.user_id;
关于postgresql - 如何获取 10% 的用户创建的所有记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56657878/