有一个名为 stat 的 MySQL 表:
line_name device_name count
1001 3548001 2
1002 3548002 3
1003 3548003 6
2001 3548004 7
2002 3548005 3
2003 3548006 4
3001 3548007 3
3002 3548008 9
3003 3548009 7
我需要选择 2 条记录,其中第一个字符是
line_name
是不同的例如:
1001 3548001 2
3003 3548009 7
或者:
2002 3548005 3
3001 3548007 3
我试过这个:
SELECT DISTINCT(SUBSTRING(line_name,1,LENGTH(line_name)-3)) as pack_id, device_name, count
from stat
order by rand()
limit 2;
但我不时得到相同的
pack_id
在结果集中
最佳答案
在 MariaDB 10.3 中,您可以使用 ROW_NUMBER() OVER (ORDER BY RAND())
为每个不同的 line_name
生成一个随机行号然后选择具有行号 = 1 的随机值对:
WITH cte AS
(SELECT *, ROW_NUMBER() OVER (PARTITION BY LEFT(line_name, 1) ORDER BY RAND()) AS rn
FROM stat)
SELECT `line_name`, `device_name`, `count`
FROM cte
WHERE rn = 1
ORDER BY RAND()
LIMIT 2
Demo on dbfiddle
输出(几次运行)
line_name device_name count
1003 3548003 6
3002 3548008 9
line_name device_name count
2001 3548004 7
1003 3548003 6
关于mysql - MariaDB 10.3.18 : How to get 2 records with random and distinct value?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58163041/