だからあなたはあなたが希望するユーザーの数である、@nを提供しています。 @ xは、写真が必要なユーザーの割合です。
select top (@n) *
from
(
select top (@n * @x/100) *
from users
where picture is not null
union all
select top (@n) *
from users
where picture is null
) u
order by case when picture is not null then 1 else 2 end;
そう...あなたは写真を持って、そして残りは写真を持っていない人でなければならない最も@n * @x/100ユーザーで欲しいです。だから私は自分の@n * @ x/100の絵 - 人と私の@nを完成させるのに十分な他の人との間で '合体'をしています。それから私はそれらを選んで、TOPを注文して写真を持っている人たちを守るようにします。
ロブ
は編集:実は、これは良いだろう:
select top (@n) *
from
(
select top (@n * @x/100) *, 0 as NoPicture
from users
where picture is not null
union all
select top (@n) *, 1 as NoPicture
from users
where picture is null
) u
order by NoPicture;
...それはORDER BYの影響を除去するので。
-1えっ?あなたはN全体に限定されず、誰が絵を持っているのか、誰が誰でないのかを伝えるコードは意味がありません。 –
私はいくつかのコメントを追加しましたので、今はもっと意味があると思います...それは最もエレガントなコードではないと私は同意しますが、うまくいくと思います。私は個人的にロブのソリューションを好む。 – Max
ありがとうございました。あなたが好きなら、それを答えとしてマークすることができます。私はまだ自分のプロフィールに多くの回答を受け入れていないような気がします。私の評判の大部分は、最初にサイトに参加したときに投稿した1つの回答から来ています。 –