SQL选择:均匀分配结果集

时间:2019-06-19 01:04:03

标签: sql

我有一个名为TableA的表,其中有一个Color列。

总共9行,如果我select * from TableA order by Color,我将得到结果集

blue
blue
blue
green
green 
green
red
red
red

如何在选择语句中分配颜色,使得结果集为

blue
green
red
blue
green
red
blue
green
red

注:此样本显示每种颜色的均等数量。我希望有一种解决方案,可以处理不相等数量的每种颜色。

这是另一个例子:

NAME, eye color
John, blue
Joe, blue
Jim, blue
Jerry, blue
Jack, blue
Jamie, blue
Steve, green
Sam, green
Sally, green
Sara, green
Mark, brown
Max, brown
Mary, brown
Nathan, red
Nick, red

可能的结果:

John, blue
Steve, green
Mark, brown
Nathan, red
Joe, blue
Sam, green
Max, brown
Nick, red
Jim, blue
Sally, green
Mary, brown
Jerry, blue
Sara, green
Jack, blue
Jamie, blue

2 个答案:

答案 0 :(得分:1)

您可以在row_number()中使用order by

select a.*
from TableA a
order by row_number() over (partition by a.Color order by a.color),
         color;

答案 1 :(得分:1)

您可以使用窗口函数/子查询:

<table class="table">
  <thead>
    <tr>
      <th></th>
      <th></th>
      <th> </th>
      <th></th>
      <th></th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td></td>
      <td></td>
      <td></td>
      <td></td>
      <td></td>
    </tr>
    <tr>
      <td></td>
      <td></td>
      <td></td>
      <td></td>
      <td></td>
    </tr>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    </tr>
    <tr>
      <td></td>
      <td></td>
      <td></td>
      <td></td>
      <td></td>
    </tr>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    </tr>
    <tr>
      <td></td>
      <td></td>
      <td></td>
      <td></td>
      <td></td>
    </tr>
    <tbody>
</table>

https://rextester.com/FIJDL68429