寻找代表'数据库中的数据组

时间:2017-04-12 06:56:25

标签: python sql oracle algorithm

我在数据库中有这些数据看起来或多或少是这样的:

id (int) not null unique | measurement_id (int) not null | range_id (int) not null unique | temperature (int) | TimeOfDay (string) either Dawn or Day or Night | Weather.Clear (Boolean) either true or null | Weather.Cloudy (Boolean) either true or null | Weather.Fog (Boolean) either true or null | Weather.Snow (Boolean) either true or null | Area.City (Boolean) either true ot null | Area.Country (Boolean) either true or null | etc

这里有数十万行,让我们说有人对这些数据进行了统计,例如,40%的所有行都有Day in(TimeOfDay(string)Dawn或Day或Night)列,65%在(Weather.Clear(布尔值)为true或null)列等中为真。另外通常的逻辑适用,如果Weather.Clear设置为true,则Weather.Cloudy为null等。

我的工作是找到代表'一组让我们说1000行数据。所以我需要40%的1000 = 400行,其中有Day(TimeOfDay(字符串)黎明或白天或黑夜)列,其中65%(650)有真正的' in(Weather.Clear(布尔值)为true或null)列等。

我意识到只使用SQL(oracle)查询(或者我可能是错的)会非常困难,所以我应该使用像python这样的通用编程语言来获取我需要的结果?对此有什么想法吗?

问候。

1 个答案:

答案 0 :(得分:1)

统计数据中使用的一种方法是获取'代表'数据组random sampling

SQL中可能出现的简单问题如下

1)为表中的每一行指定0到1之间的随机值

2)对随机列

上的数据进行排序

3)按照定义的顺序获得第N行

SELECT id
FROM
  (SELECT id,
    rnd
  FROM
    ( SELECT id, dbms_random.value rnd FROM t
    )
  ORDER BY rnd
  )
WHERE rownum <= 1000;