按表中每个值的百分比获取数据



我有两个按姓氏相互关联的表(last_name表)和(familys表)。。。所以lastname表中的每个姓氏在familys表中都有许多family。。现在我想为每个姓氏选择50%的家族。。请问我该怎么做。。。

select top 50 percent 
    family_id , 
    family_name , 
    last_name 
from 
    families 
where 
    last_name = 'here i want all of last name'

之后,我想计算我从每个姓氏的家族中选择的所有家族。。感谢

不需要C#或循环,下面的解决方案可能不理想,但应该会朝着正确的方向迈出一步:

SELECT F.family_id, F.family_name, F.last_name FROM
(SELECT family_id, family_name, last_name, 
ROW_NUMBER() OVER (PARTITION BY last_name ORDER BY last_name) RowNo
FROM families) F
INNER JOIN (
SELECT last_name, Count(1) as FamCount
FROM families
GROUP BY last_name) GR
ON F.last_name = GR.last_name
AND F.RowNo <= GR.FamCount / 2

这里的想法是:第一个内部选择为每个姓氏相同的家族提供一个行号。第二个选择获取相同姓氏的族的总数。加入将获得每个家庭一半的选择。

以下是演示:http://sqlfiddle.com/#!3/2900 4/3该表有4个姓约翰逊的家庭和6个姓帕特森的家庭。查询分别返回2个和3个家族。

有了这个结果,您可以执行其他操作(例如,按姓氏分组以从选择中获得计数)

最新更新