标签: sql-limit

限制SQL请求的结果

我想知道是否可以限制SQL请求的结果?例如,最多只返回50行

  SELECT * FROM <table>
Run Code Online (Sandbox Code Playgroud)

谢谢.

sql resultset sql-limit

5
推荐指数
4
解决办法
5360
查看次数

SQL选择元素,其中字段的总和小于N.

鉴于我有一个包含以下内容的表,内容非常简单:

# select * from messages;
  id | verbosity 
 ----+-----------
   1 |        20
   2 |        20
   3 |        20
   4 |        30
   5 |       100
 (5 rows)
Run Code Online (Sandbox Code Playgroud)

我想选择N个消息,其中详细程度的总和低于Y(为了测试目的,假设它应该是70,那么正确的结果将是id为1,2,3的消息).这对我来说非常重要,该解决方案应该是独立于数据库的(至少应该在Postgres和SQLite上工作).

我试着用这样的东西:

SELECT * FROM messages GROUP BY id HAVING SUM(verbosity) < 70;
Run Code Online (Sandbox Code Playgroud)

但是它似乎没有按预期工作,因为它实际上并没有从详细列中汇总所有值.

我会非常感谢任何提示/帮助.

sql sqlite postgresql aggregate-functions sql-limit

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

Postgres min功能表现

我需要最低价值runnerId.

这个查询:

SELECT "runnerId" FROM betlog WHERE "marketId" = '107416794' ;
Run Code Online (Sandbox Code Playgroud)

需要80毫秒(1968结果行).

这个:

SELECT min("runnerId") FROM betlog WHERE "marketId" = '107416794' ;
Run Code Online (Sandbox Code Playgroud)

需要1600毫秒.

是否有更快的方法来找到最小值,或者我应该在我的java程序中计算min?

"Result  (cost=100.88..100.89 rows=1 width=0)"
"  InitPlan 1 (returns $0)"
"    ->  Limit  (cost=0.00..100.88 rows=1 width=9)"
"          ->  Index Scan using runneridindex on betlog  (cost=0.00..410066.33 rows=4065 width=9)"
"                Index Cond: ("runnerId" IS NOT NULL)"
"                Filter: ("marketId" = 107416794::bigint)"

CREATE INDEX marketidindex
  ON betlog
  USING btree
  ("marketId" COLLATE pg_catalog."default");
Run Code Online (Sandbox Code Playgroud)

另一个想法:

SELECT "runnerId" FROM betlog WHERE …
Run Code Online (Sandbox Code Playgroud)

sql postgresql indexing performance sql-limit

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

使用LIMIT的慢速Postgres查询

我遇到了一个与PostgreSQL查询类似的问题,但限制为1的速度非常慢,带ORDER和LIMIT子句的PostgreSQL 速度非常慢,尽管在我的情况下,是否LIMIT为1、5或500 都没有关系。

基本上,当我无限制地运行由Django的ORM生成的查询时,该查询花费了半秒钟,但有限制(为分页而增加)则需要7秒钟。

耗时7秒的查询是:

SELECT "buildout_itemdescription"."product_code_id",
         MIN("buildout_lineitem"."unit_price") AS "min_price"
FROM "buildout_lineitem"
INNER JOIN "buildout_itemdescription"
    ON ("buildout_lineitem"."item_description_id" = "buildout_itemdescription"."id")
WHERE (("buildout_lineitem"."report_file_id" IN (154, 172, 155, 181, 174, 156, 157, 182, 175, 176, 183, 158, 177, 159, 179, 178, 164, 180, 367, 165, 173, 166, 167, 168, 368, 422, 370, 169, 1335, 1323, 161, 160, 162, 170, 171, 676, 151, 163, 980, 152, 369, 153, 963, 1718, 881, 617, 1759, 1780, …
Run Code Online (Sandbox Code Playgroud)

postgresql database-performance sql-limit

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

使用SqlAlchemy和PostgreSQL更新.. LIMIT 1

使用SqlAlchemy,是否可以构建一个只更新第一个匹配行的查询?

就我而言,我需要更新最新的日志条目:

class Log(Base):
    __tablename__ = 'logs'
    id = Column(Integer, primary_key=True)
    #...
    analyzed = Column(Boolean)

session.query(Log)  \
    .order_by(Log.id.desc())  \
    .limit(1)  \
    .update({ 'analyzed': True })
Run Code Online (Sandbox Code Playgroud)

结果如下:

InvalidRequestError:调用limit()时无法调用Query.update()

这是有道理的,因为它UPDATE ... LIMIT 1是一个仅限MySQL的功能(这里给出了解决方案)

但是我如何对PostgreSQL做同样的事情呢?可能,使用子查询方法

python postgresql sqlalchemy sql-update sql-limit

4
推荐指数
1
解决办法
2951
查看次数

在 Java 中使用带有准备语句的 LIMIT 命令的 MySQL 语法错误

我正在用 Java 编写代码,每次运行此代码时,我都想从 MySQL 表中提取下一行。第二次运行此代码时就是这样。

String timh1 = "1";
String timh2 = "2";
PreparedStatement st = null;
String sqlGrammes = "SELECT SURNAME ,KATHGORIA, AFM , NAME FROM EMPLOYEE LIMIT ?,? ";
try {
    st = connection.prepareStatement(sqlGrammes);
    st.setString(1, timh1);
    st.setString(2, timh2);
Run Code Online (Sandbox Code Playgroud)

但它向我展示了这个错误:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在第 1 行的“1”、“2”附近使用的正确语法

java mysql jdbc prepared-statement sql-limit

4
推荐指数
1
解决办法
5278
查看次数

如何在条件语句中设置 LIMIT;POSTGRESQL

我想按 id 按降序对结果进行排序,然后根据 @condition 限制获得的行数

ORDER BY id DESC
IF @condition is TRUE THEN  LIMIT 1
ELSE nothing
END IF
Run Code Online (Sandbox Code Playgroud)

sql postgresql sql-limit

4
推荐指数
1
解决办法
3311
查看次数

奇怪的结果使用order by和limit

我正在尝试使用SQL设置分页.我想要每页3个结果,这就是我所做的:

SELECT mot_cle.* FROM mot_cle 
ORDER BY hits DESC LIMIT 3 OFFSET 0; --Page 1

SELECT mot_cle.*  FROM mot_cle 
ORDER BY hits DESC LIMIT 3 OFFSET 3; --Page 2

SELECT mot_cle.*  FROM mot_cle 
ORDER BY hits DESC LIMIT 3 OFFSET 6; --Page 3

SELECT mot_cle.* 
FROM mot_cle 
ORDER BY hits DESC LIMIT 3 OFFSET 9; --Page 4
Run Code Online (Sandbox Code Playgroud)

我检查了很多次,这不是很复杂,但我的结果并不是我所期望的:

第1页:

+-----+--------+------+
| id  |  mot   | hits |
+-----+--------+------+
|   2 | test   |   46 |
|   1 | blabla | …
Run Code Online (Sandbox Code Playgroud)

mysql sql select sql-order-by sql-limit

3
推荐指数
1
解决办法
1219
查看次数

每组的最小行数

以下是我的查询:

SELECT *
FROM (
    SELECT f.max, f.min, p.user_id, p.id, p.title, p.rating,
    RANK() OVER (
        PARTITION BY p.user_id
        ORDER BY p.rating DESC, p.id DESC
    ) AS rnk
    FROM posts AS p
    INNER JOIN friends AS f ON (p.user_id = f.friend_id)
    WHERE f.user_id=1
) AS subq
WHERE (subq.rnk <= subq.max)
LIMIT 10
Run Code Online (Sandbox Code Playgroud)

它会搜索我朋友的帖子,按照评分和日期排序.在此查询中实现的窗口函数允许我根据表上的MAX字段限制为每个朋友返回的行数Friends.

但是,我还有一个字段MIN,用于指定给定朋友的查询所需的最小帖子数.怎么可能?

我也想知道SQL是否是这些类型查询的最佳选择?我已经尝试过Neo4j Graph数据库,虽然它似乎是一个很好的解决方案,但我宁愿避免使用2个独立的数据库.

SQLFiddle

架构:

CREATE TABLE friends(
    user_id int,
    friend_id int,
    min int,
    max int
);

CREATE TABLE posts(
   id int, …
Run Code Online (Sandbox Code Playgroud)

sql postgresql neo4j greatest-n-per-group sql-limit

3
推荐指数
1
解决办法
217
查看次数

如果没有匹配则选择第一条记录

在PostgreSQL中,我想根据某些条件选择一行,但如果没有符合条件的行,我想返回第一行.该表实际上包含一个序数列,因此任务应该更容易(第一行是序号为0的那一行).例如:

SELECT street, zip, city
FROM address
WHERE street LIKE 'Test%' OR ord = 0
LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,没有办法保证匹配的记录的顺序,我没有任何东西可以按顺序排序.使用单个SELECT语句执行此操作的方法是什么?

sql postgresql sql-limit

3
推荐指数
1
解决办法
142
查看次数