我对动态生成的 SQL 查询有疑问。我有一个巨大的数据库,用户存储在不同的表中。我需要动态创建一个查询,该查询将根据不同分区的一些限制向我返回 user_id-s。到目前为止,我创建了一个逻辑,它将根据限制为我创建查询,但我无法弄清楚如何过滤结果以具有不同的分区。例如:
我有以下内容:
1:男性
2:女性
3:18-24 岁
4:25-99岁
5:在 IBM 工作
假设我有 50k 女性,50k 男性
现在,如果我的限制是(1 或 2)和 5,这意味着它是在 IBM 工作的男性还是女性,我生成了类似这样的东西
SELECT DISTINCT user_id from usertable1 where age in (0,1)
INTERSECT
SELECT DISTINCT user_id from usertable2 where work_place = 'IBM'
现在我的问题是这还不够,有时我必须对结果集的用户 ID 进行分区,例如结果列表中有 33% 的男性和 66% 的女性。我不知道如何正确获取它。我试着计算我有多少女性和男性用户,然后对他们应用一个顶部,如下所示:
SELECT DISTINCT top 25000 user_id from usertable1 where age in (0)
UNION
SELECT DISTINCT top 50000 user_id from usertable1 where age in (1)
SELECT DISTINCT user_id from usertable2 where work_place = 'IBM'
但是,这并没有给我正确的解决方案,问题是如果我的列表中没有在 IBM 工作的女性用户,这将返回 25k 男性和 0 女性,这不是 33% 的男性和 66% 的女性.. .
现在更复杂的是,我可以进行更难的分区,这样结果必须包含 33% 的男性,其中 75% 的年龄在 18-24 和 25 之间,年龄在 25-99 和 66% 的女性,其中 75% 的年龄18-24 至 25 岁及以上
所以我的问题是我不知道如何解决这两个问题,它可以在巨大的数据库上工作,与完整数据库相比,50k 男性和 50k 女性很小。有人对我的至少一个问题有任何想法吗?
编辑1: 我的表结构有点奇怪,它更像是一个链接表。为了简化它并显示我的问题,让我们考虑这个与我的格式相似的示例表。我有用户 ID、问题、问题答案、年龄、性别。相同的 user_id 出现多次,因为这只是一个链接表,用户主要回答多个问题。到目前为止,我知道它的结构不是最优的,但它不是我设计的,也不是我可以修改的。我的任务是获取完成所有限制的不同 user_id,并根据另一个限制集过滤结果以进行百分比分区。到目前为止,我根据限制得到了正确的 user_id,但我不知道如何修改它才能进行百分比分区。
所以,更准确地说,我有一个限制集,可以是 (1 OR 2) AND 3 AND 4 等等。我从中创建了一个反向抛光表格,以便能够按顺序解决它。根据每个限制(例如男性,年龄在 18-24 岁之间),我创建查询,然后将其与联合或相交连接。只要我不需要对它进行分区,它就可以很好地工作。但不幸的是,情况确实如此,因为我的结果不包含有关已回答问题的任何详细信息,也没有仅包含 user_id 的年龄或性别,我不知道如何修改它,以便能够过滤结果以获得想要的分区大小按百分比。