mysql按比例限制输出结果

MYSQL如何按比例取数
一个表里的type字段有3个值,分别为a、b、c,现在想要输出一个结果,a值的取a值总量的50%,b值的取b值总量的40%,c值的取c值总量的30%,这个要如何取数呀

查处总条数,然后limit count(*)*0.5 取整,最后在union 和在一起

SELECT *
FROM table
WHERE type = 'a'
ORDER BY UUID()
LIMIT (SELECT COUNT(*) * 0.5
FROM table
WHERE type = 'a');

别的类似

SELECT 
    type,
    CASE
        WHEN type = 'a' THEN ROUND(COUNT(*) * 0.5)
        WHEN type = 'b' THEN ROUND(COUNT(*) * 0.4)
        WHEN type = 'c' THEN ROUND(COUNT(*) * 0.3)
    END AS count
FROM your_table
GROUP BY type;

【以下回答由 GPT 生成】

SELECT type, COUNT(*) AS count
FROM table_name
GROUP BY type

这段SQL代码可以获取每个type的数量。然后,我们可以使用这些数量来计算每个type应该限制的数量。

接下来,我们需要使用MySQL的变量来保存每个type的限制数量。我们可以使用IF语句来判断每个type的数量,并将其保存在相应的变量中。

SET @total_a := 0;
SET @total_b := 0;
SET @total_c := 0;

SELECT @total_a := ROUND(count * 0.5)
FROM (SELECT COUNT(*) AS count FROM table_name WHERE type = 'a') AS a_count;

SELECT @total_b := ROUND(count * 0.4)
FROM (SELECT COUNT(*) AS count FROM table_name WHERE type = 'b') AS b_count;

SELECT @total_c := ROUND(count * 0.3)
FROM (SELECT COUNT(*) AS count FROM table_name WHERE type = 'c') AS c_count;

SELECT type, column1, column2, ...
FROM table_name
WHERE 
    (type = 'a' AND (@total_a := @total_a - 1) >= 0)
    OR (type = 'b' AND (@total_b := @total_b - 1) >= 0)
    OR (type = 'c' AND (@total_c := @total_c - 1) >= 0)

这段代码首先创建了三个变量@total_a、@total_b和@total_c,并将它们初始化为0。

然后,使用子查询计算并保存每个type的限制数量。在这里,子查询返回了每个type的数量,并将其乘以相应的比例。

最后,使用一个WHERE子句来限制输出的结果。在这里,使用IF语句来检查每个type的限制数量是否大于0,如果大于0,则减少限制数量并返回相应的行。

请注意,这个解决方案是一种近似的解决方案,它可能无法完全满足比例限制要求。如果需要更精确的比例限制,请考虑使用存储过程或编写自定义的查询逻辑来实现。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^