假设我有一个包含10.000行(代表10,000人)的表格和以下列:
id qualification gender age income
当我选择所有具有一定资格的人(比如说“水管工”)时,我得到100行,具有一定的性别,年龄和收入分配。
我现在想做的是选择某种测试组来检查收入是否受到资格或其他属性分布的影响。
这意味着(现在我来到我的问题)我想获得另一组100行,具有相同的性别和年龄分布(但具有不同的资格值)。当然应该随机选择这100行。
我的主要问题是,当我选择随机行时,我不知道如何编写一个可以处理分布的SQL命令(当然这可能也许应该被视为此上下文中的概率)。 p>
提前谢谢!
答案 0 :(得分:2)
您似乎正试图解决与this extremely thorny problem紧密相关的问题。
维基页面描述了一些检测数据库中相关性的方法,包括对先前的pg-hacker讨论(here's another)的参考,各种(被拒绝的)补丁提议以及讨论主题。
如果听起来太棘手,我会提出第二个Catcall的pl / r建议。或者另一个适用的pl。
顺便说一句,你可能会发现pg-kmeans也很有用:
http://pgxn.org/dist/kmeans/doc/kmeans.html
和PostStat一样(从未尝试过):
答案 1 :(得分:1)
stats.stackexchange.com可能会更好。
选择随机行很容易;匹配分配很难。
你可以编写一个
的存储过程但这似乎就像在沙滩上踢死鲸一样。而且,根据您的数据,它可能永远不会返回。
在花费大量时间尝试在SQL中执行此操作之前,请考虑花一点时间来查看这与使用统计软件(例如R)有多难(或多么容易)。
<强>后来
刚刚发现有一个名为pl/R的包。
PL / R是一种可加载的过程语言,可以让您编写 PostgreSQL在R编程语言中的函数和触发器。 PL / R 提供函数编写器所具有的大部分(如果不是全部)功能 R语言。
Google postgresql +statistics +r +pl
以获取论文和教程的其他链接。
答案 2 :(得分:0)
SELECT * from Table1 order by random() limit 100;
random()对PostgreSql有效。对于MySql,您可以使用RAND()而不是Random()