以下是mysql表中的一些示例数据
a b distance
15 44 250
94 31 250
30 41 250
6 1 250
95 18 250
72 84 500
14 23 500
55 24 500
95 8 500
59 25 500
40 73 500
65 85 500
32 50 500
31 39 500
22 25 500
37 11 750
98 39 750
15 57 750
9 22 750
14 44 750
69 22 750
62 50 750
89 35 750
67 65 750
74 37 750
52 36 750
66 53 750
82 74 1000
79 22 1000
98 41 1000
如何查询此表,以便随机选择每个距离2行?
成功的查询会产生类似
的内容 a b distance
30 41 250
95 18 250
59 25 500
65 85 500
15 57 750
89 35 750
79 22 1000
98 41 1000
答案 0 :(得分:5)
使用:
SELECT x.a,
x.b,
x.distance
FROM (SELECT t.a,
t.b,
t.distance
CASE
WHEN @distance != t.distance THEN @rownum := 1
ELSE @rownum := @rownum + 1
END AS rank,
@distance := t.distance
FROM TABLE t
JOIN (SELECT @rownum := 0, @distance := '') r
ORDER BY t.distance --important for resetting the rownum variable) x
WHERE x.rank <= 2
ORDER BY x.distance, x.a
答案 1 :(得分:0)
一种方法是使用联合。像这样:
(SELECT a, b, distance FROM table WHERE distance = 250 LIMIT 2 ORDER BY RAND())
UNION
(SELECT a, b, distance FROM table WHERE distance = 500 LIMIT 2 ORDER BY RAND())
...
ORDER BY distance
我可以想到一种方法,即使用distinct = /获取每个查询中的一个,但就像我说的只会给你带来一个。
答案 2 :(得分:0)
我想知道这是否有用?
SELECT
a,b,distance
FROM YourTable t2
WHERE ROW(a,b,distance) IN
(
SELECT a,b,distance FROM YourTable t1
WHERE t1.distance=t2.distance ORDER BY RAND() LIMIT 2
)
编辑:遗憾的是没有。子查询不支持LIMIT。