限制子句中的Mysql子查询

时间:2014-02-04 02:14:19

标签: mysql

是否可以在mysql的limit子句中包含子查询?我只想在一个查询中选择同一个表中总行数的10%。

SELECT * FROM table LIMIT (SELECT (10 * COUNT(*)/100) FROM table);

关于如何实现这一目标的任何建议?

3 个答案:

答案 0 :(得分:1)

你问:

  

是否可以在mysql的limit子句中包含子查询?

答案基本上没有。

阅读本文:

http://dev.mysql.com/doc/refman/5.6/en/select.html

  

LIMIT子句可用于约束返回的行数   通过SELECT语句。 LIMIT需要一个或两个数字参数,   这些必须都是非负整数常数   例外:

     

在预准备语句中,可以使用?指定LIMIT参数?   占位符标记。

     

在存储的程序中,可以使用指定LIMIT参数   整数值的例程参数或局部变量。

答案 1 :(得分:1)

如果您需要user variables,可以使用TOP 10%,如下所示。

SELECT *
FROM (
    SELECT @seq := @seq + 1 AS seq, table.* FROM table, (SELECT @seq := 0) AS init1,
    (SELECT @ten_percent := (SELECT (10 * COUNT(*)/100) FROM table)) AS init2
) x
WHERE seq < @ten_percent;

答案 2 :(得分:0)

如果您想随机选择约10%的行:

SELECT *
FROM table
WHERE rand() < 0.1;

它不是100%精确,但它适用于大多数应用程序。