如何显示表中的一半记录?MYSQL.



我正在寻找MYSQL查询,而不是PLSQL查询

select *  from aadhar limit (select count(*)/2 from aadhar);

我试图喜欢这个,但收到此错误请帮助

错误代码:1064。您的 SQL 语法有误;检查与您的MySQL服务器版本相对应的手册,了解在第1行的' (select count(*)/2 from aadhar ) '附近使用的正确语法

与已经解释过的其他答案一样LIMIT不能在查询中动态设置。
但是你可以用MySQL用户变量结合PREPARE / EXECUTE来解决它。

SET @count = (SELECT COUNT(*)/2 FROM aadhar); 
SET @sql = CONCAT('SELECT * FROM aadhar LIMIT ', @count);
PREPARE q FROM @sql;
EXECUTE q;
DEALLOCATE PREPARE q;

或(最安全的选择

SET @count = (SELECT COUNT(*)/2 FROM aadhar); 
PREPARE q FROM 'SELECT * FROM aadhar LIMIT ?';
EXECUTE q USING @count;
DEALLOCATE PREPARE q;

额外警告

请注意,根据定义,SQL是无序的。使用没有ORDER BYLIMIT没有意义的。SQL可以自由地以它希望的顺序返回匹配的记录,而不会ORDER BY这意味着运行相同的查询两次可能会导致不同的结果。

此外,最好使用 CEIL()CAST() 将双精度转换为 int,这样当表的记录中有一个奇数并生成带有双精度的 SQL 时,方法就不会出错,就像这样SELECT * FROM aadhar LIMIT 1.500000000

查看有关如何执行这些操作的演示

也许不是你想要的,而是——"在存储程序中,可以使用整数值例程参数或MySQL 5.5.6的局部变量来指定LIMIT参数 https://dev.mysql.com/doc/refman/5.5/en/select.html。

如果您不想使用动态 sql 或存储过程,但您确实有某种排序表的方法,那么行号模拟(版本 8 之前)或row_number窗口函数(版本 8 打开)可能会有所帮助。鉴于

+-----+----------+
| id  | username |
+-----+----------+
|   1 | aaa      |
|   2 | Jane     |
|   3 | Ali      |
|   6 | Bruce    |
|   7 | Martha   |
|   8 | Sidney   |
|  10 | charlie  |
|  12 | Elisa    |
|  14 | Samantha |
|  15 | Hannah   |
|  16 | Hannah   |
|  17 | Kevin    |
| 999 | bob      |
+-----+----------+
13 rows in set (0.00 sec)
SELECT S.ID,S.USERNAME FROM
(
SELECT U.ID,U.USERNAME,
         @RN:=@RN+1 ROWNUMBER,
         (SELECT ROUND(COUNT(*)/2) FROM USERS) TOPN
FROM USERS U
CROSS JOIN (SELECT @RN:=0) R
ORDER BY U.ID 
) S
WHERE S.ROWNUMBER <= S.TOPN;

将导致

+----+----------+
| ID | USERNAME |
+----+----------+
|  1 | aaa      |
|  2 | Jane     |
|  3 | Ali      |
|  6 | Bruce    |
|  7 | Martha   |
|  8 | Sidney   |
| 10 | charlie  |
+----+----------+
7 rows in set (0.00 sec)

MySQL中没有规定选择和显示表中总记录的一半,除非您在LIMIT子句中明确指定标量。

您可以使用变量来实现此目的。

SELECT  @s:=@s+1 id,a.*
FROM    aadhar a,
        (SELECT @s:= 0) AS s where @s < (SELECT count(*)/2 from aadhar a2)

这里的"@s"是一个变量,并添加自动递增的创建 id。其中条件存储总记录计数的一半,@s达到记录一半计数的限制后停止。

试试这个:

select *  from aadhar limit ((select count(*) from aadhar)/2);

count 子句返回记录数,该值的一半是限制。

最新更新