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

时间:2013-11-30 00:37:11

标签: c# sql

我有两个表(last_name表)和(族表),它们通过姓氏相互关联...所以last_name表中的每个姓都在族表中有许多族...现在我想选择50%的每个姓氏的家庭..我怎么能这样做...

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

之后我想计算我从家庭中为每个last_name选择的所有家庭。 谢谢

1 个答案:

答案 0 :(得分:0)

不需要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/2900e4/3该表有4个姓氏为Johnson的家庭和6个带有Patterson的家庭。并且查询恭敬地返回2和3个家庭。

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