我想知道在MySQL中是否有一些聪明的方法可以根据特定标准返回“混合/平衡”数据集?
为了说明,假设表中可能存在类型1或类型2的结果(即,每个记录的列的值为1或2)。是否有一个聪明的查询能够直接返回1到2之间的结果:
第1条记录属于1, 第2条记录是2型, 第3条记录是1型, 第4条记录是2型, 等...
道歉,如果问题很愚蠢,只是寻找一些选择。当然,我可以返回任何数据并在PHP中执行此操作,但它确实添加了一些代码。
感谢。
答案 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
排序,您可以在内部选择中更改此值,或在那里添加条件。
如果某个类型(1
或2
)的值更多,则可以在其余类型(1 2 1 2 2 2
)之后获取它们。
答案 1 :(得分: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
时,效果很好