mysql - MariaDB 10.3.18 : How to get 2 records with random and distinct value?

标签 mysql sql mariadb groupwise-maximum

有一个名为 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/

相关文章:

mysql - SQL - 按条目 X 彼此间隔的时间对表进行分组

php - 如何在 SQL 中将值显示为 Y 或 N?

java - 无法保存所有小数位

具有指定证书的 Java MySQL SSL 连接

php - 数据提交后如何通过MySQL显示表中的数据?

php - 如何将值数组从 android 发送到 php

mysql - 无法在 FROM 子句中指定要更新的目标表 t4

mysql - 在 MySql Workbench 中创建 EER,用于记录用户 IP、用户代理、日期和货币兑换金额

带有派生表的 SQL Server 查询产生语法错误

mysql - 为什么自然连接在以下情况下输出为空集?