MySQL:是否可以返回“混合”数据集?

时间:2010-04-20 10:51:28

标签: sql mysql select resultset

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

为了说明,假设表中可能存在类型1或类型2的结果(即,每个记录的列的值为1或2)。是否有一个聪明的查询能够直接返回1到2之间的结果:

第1条记录属于1, 第2条记录是2型, 第3条记录是1型, 第4条记录是2型, 等...

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

感谢。

2 个答案:

答案 0 :(得分: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)之后获取它们。

答案 1 :(得分:0)

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

SELECT IF(condition, first_column, second_column) FROM your_table

first_columnsecond_column可以是不同类型,例如:

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

时,

效果很好