标签: select

如何使用 LIMIT 计算行数?

我想捕捉 X 行,因此,我设置了LIMIT X; 但是我怎样才能同时计算总行数呢?

目前,我使用两个单独的查询来这样做

SELECT COUNT(*) FROM col WHERE CLAUSE
SELECT * FROM col WHERE CLAUSE LIMIT X
Run Code Online (Sandbox Code Playgroud)

有没有办法在一个查询中做到这一点?

编辑:输出应该是col单元格和行数。实际上,选择col单元格后,它应该只走表格以进行计数。

我知道不可能合并这两个查询,因为第一个返回 1 行,但第二个返回 X 行。我很好奇 mysql 中是否有一个函数可以在LIMIT.

mysql count select mysql-5.5

13
推荐指数
2
解决办法
4万
查看次数

Postgres:如何插入带有自动增量 ID 的行

有一个表“上下文”。有一个自动增量 ID“context_id”。我正在使用序列来检索下一个值。

SELECT nextval('context_context_id_seq')
Run Code Online (Sandbox Code Playgroud)

结果是:1, 2, 3,...20....

但是“上下文”表中有 24780 行

如何获得下一个值 (24781)?

我需要在 INSERT 语句中使用它

postgresql insert auto-increment select

13
推荐指数
1
解决办法
10万
查看次数

仅选择对特定列具有不同/多个值的记录

下面是我的会员表的一个例子。在电子邮件字段中有一些记录具有多个值。我只想选择那些具有多个电子邮件值的记录:

会员表

ID   LASTNAME    FIRSTNAME    EMAIL
567  Jones       Carol        carolj@gmail.com
567  Jones       Carol        caroljones@aol.com
678  Black       Ted          tedblack@gmail.com
908  Roberts     Cole         coleroberts@gmail.com
908  Roberts     Cole         coler@aol.com
908  Roberts     Cole         colerobersc@hotmail.com
Run Code Online (Sandbox Code Playgroud)

我希望结果是:

567  Jones       Carol        carolj@gmail.com
567  Jones       Carol        caroljones@aol.com
908  Roberts     Cole         coleroberts@gmail.com
908  Roberts     Cole         coler@aol.com
908  Roberts     Cole         colerobersc@hotmail.com
Run Code Online (Sandbox Code Playgroud)

请注意,缺少 Ted Black,因为他只有一个电子邮件地址条目。

我应该澄清一下,我的会员表有 4 列以上。电话和地址等还有额外的列。一个成员可能有多个条目,因为他/她有多个电话号码或地址。我只想捕获那些拥有多个电子邮件地址的人。

这是数据库清理的一部分,将添加主键。我应该进一步澄清,有些人可能有多个具有相同电子邮件地址的条目。在此阶段,我不想捕获具有相同电子邮件地址的多个条目,而只想捕获具有不同电子邮件地址的多个条目的那些条目。

count select distinct

12
推荐指数
1
解决办法
8万
查看次数

选择查询花费的时间比它应该的要多

我有一个包含近 2300 万条记录的 MySQL 数据库表。这个表没有主键,因为没有什么是唯一的。它有 2 列,均已编入索引。下面是它的结构:

在此处输入图片说明

下面是它的一些数据:

在此处输入图片说明

现在,我运行了一个简单的查询:

SELECT `indexVal` FROM `key_word` WHERE `hashed_word`='001'
Run Code Online (Sandbox Code Playgroud)

不幸的是,这花了超过 5 秒的时间来检索数据并将它们显示给我。我未来的表将有1500亿条记录,所以这个时间非常非常高。

我运行Explain命令看看发生了什么。结果如下。

在此处输入图片说明

然后我使用以下命令运行配置文件。

SET profiling=1;
SELECT `indexVal` FROM `key_word` WHERE `hashed_word` = '001';
SHOW profile;
Run Code Online (Sandbox Code Playgroud)

下面是分析的结果:

在此处输入图片说明

以下是有关我的表的更多信息:

在此处输入图片说明

那么,为什么这需要这么长时间?他们也被索引了!将来,我必须运行很多LIKE命令,所以这花费了太多时间。出了什么问题?

mysql innodb performance select

10
推荐指数
2
解决办法
5万
查看次数

显示mysql innodb数据库中每个表的表名+记录数

如何列出当前数据库中的所有表,以及该表的行数。

换句话说,你能想出一个查询来在 mysql 中提出这样的事情吗?

+------------------------++------------------------+
| Tables_in_database     |  Number of rows         |
+------------------------++------------------------+
| database 1             |   1000                  |
| database 2             |   1500                  |
+------------------------++------------------------+
Run Code Online (Sandbox Code Playgroud)

欢迎使用不同的方法。

mysql innodb count select

10
推荐指数
2
解决办法
2万
查看次数

不相关的列会影响select语句的查询时间吗?

我只是好奇。

假设您有一个包含 100 万条记录/行的表。

select order_value from store.orders
Run Code Online (Sandbox Code Playgroud)

那个表有1个字段、2个字段还是100个字段,在实际查询的时候有区别吗?我的意思是“order_value”以外的所有字段。

现在我正在将数据推送到数据仓库。有时我将字段转储到表中,“将来可能会在某天使用” - 但现在不会被任何东西查询。这些“无关”字段是否会直接或间接影响不包含它们的选择语句(不* 我的意思是)?

performance sql-server select query-performance

10
推荐指数
2
解决办法
989
查看次数

插入表 select * from table vs 批量插入

我只是想知道 SQL 语句INSERT INTO TABLE1 SELECT * FROM TABLE2,会像批量插入一样工作吗?

如果没有,有没有办法在插入记录时排除索引。进程在一次执行中插入 1.5 亿条数据。

我们计划创建阶段表(不会有任何索引Table1),然后将其从阶段表转移到目标表(会有索引Table2

我们不是在从过程中创建平面文件的情况。

但是当我们将数据从Table1(未编入索引)传输到Table2(编入索引)时,我们正在寻找可以加快处理速度的方法。

任何方式使用BulkInsertTable1Table2

sql-server insert select bulk-insert

9
推荐指数
1
解决办法
6万
查看次数

当无法立即锁定所选行时,PostgreSQL`FOR UPDATE NOWAIT` 究竟返回了什么错误?

所述的PostgreSQL 9.4文档指出添加NOWAIT选项将SELECT FOR UPDATE当行不能被锁定时产生一个错误的装置:

要防止操作等待其他事务提交,请使用 NOWAIT 选项。使用 NOWAIT,如果无法立即锁定所选行,该语句将报告错误,而不是等待。

那究竟是什么错误?

由于这是一个可接受的条件,我希望我的 Java 代码检查此类预期错误,然后解决它。

postgresql select locking

9
推荐指数
1
解决办法
6790
查看次数

SELECT 会像 V​​ACUUM 一样删除死行吗?

我在摆弄VACUUM并注意到一些意想不到的行为,其中SELECT从表中ing 行似乎减少了VACUUM之后必须做的工作。

测试数据

注意:autovacuum 被禁用

CREATE TABLE numbers (num bigint);
ALTER TABLE numbers SET (
  autovacuum_enabled = 'f',
  toast.autovacuum_enabled = 'f'
);

INSERT INTO numbers SELECT generate_series(1, 5000);
Run Code Online (Sandbox Code Playgroud)

试验 1

现在我们对所有行运行更新,

UPDATE numbers SET num = 0;
Run Code Online (Sandbox Code Playgroud)

当我们跑步时,VACUUM (VERBOSE) numbers;我们得到,

INFO:  vacuuming "public.numbers"
INFO:  "numbers": removed 5000 row versions in 23 pages
INFO:  "numbers": found 5000 removable, 5000 nonremovable row versions in 45 out of 45 pages
DETAIL:  0 dead row versions …
Run Code Online (Sandbox Code Playgroud)

postgresql select vacuum postgresql-11

9
推荐指数
1
解决办法
884
查看次数

如何在选择(SQL Server)中使用变量?

如果我想计算一列并在多于 1 列中使用结果,如何在不进行两次计算的情况下执行此操作?

例子:

SELECT LOWER(SUBSTRING([NAME], 4, 100)) + '@somedomain.com' as EMail
      ,hashbytes('SHA1', LOWER(SUBSTRING([NAME], 4, 100)) + '@somedomain.com') as HashedEmail
FROM sometable
Run Code Online (Sandbox Code Playgroud)

如何避免在不使用多个选择的情况下写两次?

sql-server select

8
推荐指数
1
解决办法
5万
查看次数