1

我想知道 MySQL 中是否有一些聪明的方法可以根据特定标准返回“混合/平衡”数据集?

为了说明这一点,假设表中有可能是类型 1 或类型 2 的结果(即,对于每条记录,列的值是 1 或 2)。是否有一个聪明的查询能够直接返回按顺序在 1 和 2 之间交替的结果:

第 1 条记录属于 1 型,第 2 条记录属于 2 型,第 3 条记录属于 1 型,第 4 条记录属于 2 型,依此类推……

如果问题很愚蠢,请道歉,只是寻找一些选择。当然,我可以返回任何数据并在 PHP 中执行此操作,但它确实添加了一些代码。

谢谢。

4

2 回答 2

1

像这样的查询应该做的事情:

Select some_value, x, c
From
(
  Select
    some_value, x,
    Case When x=1 Then @c1 Else @c2 End As c,
    @c1 := Case When x=1 Then @c1+2 Else @c1 End As c1,
    @c2 := Case When x=2 Then @c2+2 Else @c2 End As c2
  From test_data, (Select @c1:=0, @c2:=1) v
  Order By some_value
) sub
Order By c

它将唯一的偶数分配给x=0,奇数分配给x=1,并使用这些值作为排序标准。


它返回

some_value  x  c
A           1  0
X           2  1
B           1  2
Y           2  3
C           1  4
Z           2  5

对于以下测试数据:

Create Table test_data (
  some_value VARCHAR(10),
  x  INT
);

Insert Into test_data Values('A', 1);
Insert Into test_data Values('B', 1);
Insert Into test_data Values('C', 1);
Insert Into test_data Values('Z', 2);
Insert Into test_data Values('Y', 2);
Insert Into test_data Values('X', 2);

在交替规则中,值按 排序some_value,您可以在内部选择中更改它,或在那里添加您的条件。

如果某个类型(12)的值更多,则在其余的(1 2 1 2 2 2)之后获取它们。

于 2010-04-20T11:56:19.590 回答
0

您可以使用 IF 函数作为 SELECT 语句的一部分来更改列,但我不确定如何在两列之间自动交替。但是,如果您发现合适的条件,这将适合您

SELECT IF(condition, first_column, second_column) FROM your_table

first_column并且second_column可以是不同的类型,例如:

SELECT IF(id > 10, name, status_id) FROM clients

name是一个VARCHAR并且status_id是一个时效果很好INT

于 2010-04-20T11:00:17.187 回答