Mysql 对行进行排序以均匀分布公共记录
我有一个包含以下数据的表格:Mysql 对行进行排序以均匀分布公共记录,mysql,sql,Mysql,Sql,我有一个包含以下数据的表格: +----+-------+---------+ | id | name | country | +----+-------+---------+ | 1 | alice | usa | | 2 | bob | usa | | 3 | chad | russia | | 4 | derek | china | | 5 | ethan | usa | +----+-------+---------+ 在sql中,除了O
+----+-------+---------+
| id | name | country |
+----+-------+---------+
| 1 | alice | usa |
| 2 | bob | usa |
| 3 | chad | russia |
| 4 | derek | china |
| 5 | ethan | usa |
+----+-------+---------+
在sql中,除了ORDER BY RAND(),还有什么方法可以对我的表进行重新排序,从而允许我以这样一种方式显示记录,即每一连续行显示一个唯一的国家。i、 e.如果前一行也有国家“usa”,则尽可能长时间显示另一个国家的记录
在上述情况下,可能的输出之一是:
+----+-------+---------+
| id | name | country |
+----+-------+---------+
| 1 | alice | usa |
| 3 | chad | russia |
| 2 | bob | usa |
| 4 | derek | China |
| 5 | ethan | usa |
+----+-------+---------+
我基本上是在尝试分布行,以便在大多数记录具有共同支配值的情况下,它们看起来更分散。可能有点做作
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(id SERIAL PRIMARY KEY
,name VARCHAR(12) NOT NULL UNIQUE
,country VARCHAR(12) NOT NULL
);
INSERT INTO my_table VALUES
(1,'alice','usa'),
(2,'bob','usa'),
(3,'chad','russia'),
(4,'derek','china'),
(5,'ethan','usa'),
(6,'fred','usa');
SELECT id,name,country FROM (SELECT *, @i:=@i+1 i FROM my_table,(SELECT @i:=0) vars ORDER BY country = 'usa') a ORDER BY MOD(i,4), id;
+----+-------+---------+
| id | name | country |
+----+-------+---------+
| 2 | bob | usa |
| 3 | chad | russia |
| 5 | ethan | usa |
| 4 | derek | china |
| 6 | fred | usa |
| 1 | alice | usa |
+----+-------+---------+
6 rows in set (0.00 sec)
回顾评论,似乎你真正想要的是这样的东西
SELECT x.*
FROM my_table x
JOIN my_table y
ON y.country = x.country
AND y.id <= x.id
GROUP
BY x.id
ORDER
BY COUNT(*), country;
+----+-------+---------+
| id | name | country |
+----+-------+---------+
| 4 | derek | china |
| 3 | chad | russia |
| 1 | alice | usa |
| 2 | bob | usa |
| 5 | ethan | usa |
| 6 | fred | usa |
+----+-------+---------+
选择x.*
从我的表x
加入我的桌子
关于y.country=x.country
y.id这是不可能的。如果您还有一行带有“usa”
,则不存在此类排序。因此,会出现“尽可能长的时间”。如果没有,它可以显示剩余的“usa”行。这有助于解决问题,但我决不会知道表格中有大量的“usa”,因为数据每天都在变化。我基本上是在寻找一种解决方案,可以确保前一条记录的值与当前记录的值在相同的时间内不同possible@JKerr这是一个更容易的要求,但这不是你所要求的美国’、‘俄罗斯’、‘中国’、‘美国’、‘美国’(或‘俄罗斯’、‘中国’、‘美国’、‘美国’、‘美国’)是比‘美国’、‘俄罗斯’、‘美国’、‘中国’、‘美国’更简单的要求谢谢!你修改后的答案解决了我的问题。但看到‘美国’、‘俄罗斯’、‘美国’、‘中国’、‘美国’情景的解决方案真的很有趣too@JKerr不幸的是,那个比我的工资等级高。