使用MySQL隐藏50%的低值行
我有一个有三列的表:使用MySQL隐藏50%的低值行,mysql,select,random,Mysql,Select,Random,我有一个有三列的表: 说明(字符串) 值(1-3之间的整数) 日期 我想构建一个select,它返回: 值为3的行的100% 值为2的行的50% 值为1的行的25% 按日期订购“隐藏”值为1或2的行可以是随机的,但不一定是随机的(例如,每隔一行“隐藏”值为2) 如果只使用一个查询而不使用其他PHP脚本,这是可能的吗?一个选项是使用具有随机顺序的分析函数来识别每个值类型的前N% WITH cte AS ( SELECT *, SUM(Value = 2) OVER
- 说明(字符串)
- 值(1-3之间的整数)
- 日期
- 值为3的行的100%
- 值为2的行的50%
- 值为1的行的25%
如果只使用一个查询而不使用其他PHP脚本,这是可能的吗?一个选项是使用具有随机顺序的分析函数来识别每个值类型的前N%
WITH cte AS (
SELECT *,
SUM(Value = 2) OVER (ORDER BY RAND()) / SUM(Value = 2) OVER () pct_2,
SUM(Value = 1) OVER (ORDER BY RAND()) / SUM(Value = 1) OVER () pct_1
FROM yourTable
)
SELECT *
FROM cte
WHERE Value = 1 AND pct_1 > 0.25 OR Value = 2 AND pct_2 > 0.5 OR Value = 3;
一种选择是使用随机排序的分析函数来识别每种值类型的前N%
WITH cte AS (
SELECT *,
SUM(Value = 2) OVER (ORDER BY RAND()) / SUM(Value = 2) OVER () pct_2,
SUM(Value = 1) OVER (ORDER BY RAND()) / SUM(Value = 1) OVER () pct_1
FROM yourTable
)
SELECT *
FROM cte
WHERE Value = 1 AND pct_1 > 0.25 OR Value = 2 AND pct_2 > 0.5 OR Value = 3;