postgresql - 如何获取 10% 的用户创建的所有记录?

标签 postgresql

我有我网站的流量日志。

我想从 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/

相关文章:

Django 管理数据错误 : Value too long for type character varying(150)

postgresql - 这些凭据与我们的记录不符,laravel 5.2

ruby-on-rails-3 - 如何在 Heroku 上使用 hstore

mysql - 为地址更改+定价创建正确的数据库表结构

sql - 显示来自另一个表的数据(如果存在)

java 查找 PostgreSQL 服务器是否正在运行

java - 查询从 Java 层在数据库中的保存的 Json 中插入新的 json 字符串

sql - Group by 最小值子句

python - 从 HDF5 迁移到 PostgreSQL

python - 类似 select_related 的函数在 RawQuerySet 中不起作用