首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何显示桌子上的一半记录?MYSQL

问如何显示桌子上的一半记录?MYSQL
EN

Stack Overflow用户
提问于 2019-01-29 13:40:43
回答 5查看 5K关注 0票数 2

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

代码语言:javascript
复制
select *  from aadhar limit (select count(*)/2 from aadhar);

我试着喜欢这个,但是遇到这个错误,请帮忙

错误代码: 1064。您的SQL语法出现错误;请检查与您的MySQL服务器版本对应的手册,以获得在第1行“(select count(*)/2 from aadhar )”附近使用的正确语法。

EN

回答 5

Stack Overflow用户

发布于 2019-01-29 13:52:41

就像已经解释过的其他答案一样,不能在查询中动态设置LIMIT。

但是您可以使用MySQL用户变量和执行相结合来解决这个问题。

代码语言:javascript
复制
SET @count = (SELECT COUNT(*)/2 FROM aadhar); 
SET @sql = CONCAT('SELECT * FROM aadhar LIMIT ', @count);

PREPARE q FROM @sql;
EXECUTE q;
DEALLOCATE PREPARE q;

或(最安全的选项)

代码语言:javascript
复制
SET @count = (SELECT COUNT(*)/2 FROM aadhar); 

PREPARE q FROM 'SELECT * FROM aadhar LIMIT ?';
EXECUTE q USING @count;
DEALLOCATE PREPARE q;

额外警告

请注意,根据定义,SQL是无命令的。使用没有meaningless.的LIMIT而不使用ORDER BYSQL可以自由地返回按anny顺序匹配的记录,而不需要ORDER BY,这意味着运行相同的查询两次可能会导致不同的结果。

另外,最好使用CEIL()或CAST(),它将一个双值转换成一个int,这样当表有奇数关闭记录并使用像这个SELECT * FROM aadhar LIMIT 1.500000000那样的双值生成SQL时,方法就不会出错。

关于如何做到这一点,请参见演示

票数 4
EN

Stack Overflow用户

发布于 2019-01-29 13:51:34

也许不是您想要的,但是-‘在存储的程序中,可以使用整数值例程参数或MySQL 5.5.6中的局部变量指定限制参数’https://dev.mysql.com/doc/refman/5.5/en/select.html。

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

代码语言:javascript
复制
+-----+----------+
| 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;

会导致

代码语言:javascript
复制
+----+----------+
| ID | USERNAME |
+----+----------+
|  1 | aaa      |
|  2 | Jane     |
|  3 | Ali      |
|  6 | Bruce    |
|  7 | Martha   |
|  8 | Sidney   |
| 10 | charlie  |
+----+----------+
7 rows in set (0.00 sec)
票数 3
EN

Stack Overflow用户

发布于 2019-01-29 13:45:38

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54422411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档