【发布时间】:2013-08-21 22:13:08
【问题描述】:
我需要查询具有“性别”列的表,如下所示:
|编号 |性别 |姓名 | ------------------------- | 1 |中号 |迈克尔 | ------------------------- | 2 | F |汉娜 | ------------------------- | 3 |中号 |路易 | -------------------------我需要提取前 N 个结果,例如 80% 的男性和 20% 的女性。所以,如果我需要 1000 个结果,我会想要检索 800 个男性和 200 个女性。
-
是否可以在单个查询中完成?怎么样?
-
如果我没有足够的记录(假设我在上面的示例中只有 700 名男性)是否可以自动选择 700 / 300?
【问题讨论】:
-
对于场景 2,应该发生什么?
-
我已经编辑了我的答案以便更好地解释自己。
-
不幸的是,我不知道足够的 SQL 来给出代码方面的答案,但我可以给出逻辑:我建议一个 SP 并有一个值 N(您正在选择的数字)和取 n*.8 并选择性别为 M,计算返回为 numResultsMale 的行,然后选择 N-(numResultsMale),其中性别为 F
-
附带说明,
gender作为布尔值或M/F迟早会让您或您的用户陷入麻烦。允许“其他”或“未指定”通常是个好主意。有些人不是 100% 的男性或 100% 的女性(生物学和/或心理上,出生或改变)。 -
@CraigRinger,也许他们想要这样。满足所有用户的所有要求并不总是一个目标。我理解您的评论并同意它在许多情况下都是有效的,但我相信如果他愿意,我们应该让他将性别存储为布尔值。
标签: sql postgresql