我在数据库中有这些数据看起来或多或少是这样的:
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这样的通用编程语言来获取我需要的结果?对此有什么想法吗?
问候。
答案 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;