我想更新表中列的前10个值.我有三列; id,account和accountrank.要获得前10个值,我可以使用以下内容:
SELECT  * FROM accountrecords    
ORDER BY account DESC
LIMIT 10;
我想要做的是根据的大小将值设置accountrank为一系列.这可以在PostgreSQL中做到吗?1 - 10account
我在SQL Server中寻找类似的东西:
SELECT TOP n WITH TIES FROM tablename
我LIMIT在PostgreSQL中知道,但是上面存在的相同吗?我只是很好奇,因为它每次都会为我节省额外的查询.
如果我有一个Numbers属性表nums:{10, 9, 8, 8, 2}.我想做的事情如下:
SELECT nums FROM Numbers ORDER BY nums DESC LIMIT *with ties* 3
它应该返回,{10, 9, 8, 8}因为它需要前3加上额外的,8因为它绑定另一个.
是否有添加任何性能好处LIMIT到一个EXISTS查询,或将MySQL的应用在自己的极限?
例:
IF EXISTS (
    SELECT 1
      FROM my_table
     LIMIT 1    -- can this improve performance?
)
THEN ... END IF;
我今天正在对一些慢速SQL查询进行故障排除,并且不太了解下面的性能差异:
当尝试max(timestamp)基于某些条件从数据表中提取时,使用MAX()比ORDER BY timestamp LIMIT 1匹配行存在时慢,但如果找不到匹配的行则相当快.
SELECT timestamp
FROM data JOIN sensors ON ( sensors.id = data.sensor_id )
WHERE sensor.station_id = 4
ORDER BY timestamp DESC
LIMIT 1;
(0 rows)  
Time: 1314.544 ms
SELECT timestamp
FROM data JOIN sensors ON ( sensors.id = data.sensor_id )
WHERE sensor.station_id = 5
ORDER BY timestamp DESC
LIMIT 1;
(1 row)  
Time: 10.890 ms
SELECT MAX(timestamp)
FROM data JOIN sensors ON ( sensors.id = data.sensor_id )
WHERE sensor.station_id …我有这样一张桌子:
// notifications
+----+--------------+------+---------+------------+
| id |      event   | seen | id_user | time_stamp |
+----+--------------+------+---------+------------+
| 1  | vote         | 1    | 123     | 1464174617 |
| 2  | comment      | 1    | 456     | 1464174664 |
| 3  | vote         | 1    | 123     | 1464174725 |
| 4  | answer       | 1    | 123     | 1464174813 |
| 5  | comment      | NULL | 456     | 1464174928 |
| 6  | comment      | 1    | 123     | …我正在开发一个Java Web服务,允许在从IBM Mid Range Machine(AS400)上的DB2数据库中获取大数据集时进行分页.
例如; 如果数据集中有10000条记录,我想一次以1000块为单位获取它们.
我发现这篇文章解释说我可以使用LIMIT和OFFSET.但我需要将DB2_COMPATIBILITY_VECTOR变量设置为MYS.
现在我一直在谷歌搜索,看到你可以db2set用来设置这个变量.但是我无法找到在哪里键入此命令?
我正在开发一台Windows机器,我安装了iSeries,并且可以通过iSeries 5250仿真器访问IBM Mid Range Machine.
我知道这一定是一个真正的菜鸟问题,但我如何将DB2_COMPATIBILITY_VECTOR变量更改为MYS?
我有一个具有以下结构的表:
Contents (
  id
  name
  desc
  tdate
  categoryid
  ...
)
我需要对这个表中的数据做一些统计。例如,我想通过分组和该类别的 id 来获取具有相同类别的行数。此外,我想n按降序限制它们的行,如果有更多可用类别,我想将它们标记为“其他”。到目前为止,我已经对数据库提出了 2 个查询:  
n按降序选择行:
SELECT COALESCE(ca.NAME, 'Unknown') AS label
    ,ca.id AS catid
    ,COUNT(c.id) AS data
FROM contents c
LEFT OUTER JOIN category ca ON ca.id = c.categoryid
GROUP BY label
    ,catid
ORDER BY data DESC LIMIT 7
选择其他行作为一:
SELECT 'Others' AS label
    ,COUNT(c.id) AS data
FROM contents c
LEFT OUTER JOIN category ca ON ca.id = c.categoryid
WHERE c.categoryid NOT IN ($INCONDITION)
但是当我在 db 表中没有任何类别组时,我仍然会得到一个“其他”记录。是否可以在一个查询中进行,并使“其他”记录可选?
SELECT TOP ...在Postgres 中描述查询的大多数资源都说你应该使用LIMIT,ORDER BY如果需要通过某种顺序选择顶部元素,可能使用子句.
你会怎么做,如果你需要选择一个递归查询,那里是没有排序的前N个元素和有可能的查询可以在不递归返回N多行少(这样TOP的部分是必要的,以确保结果set 至少是 N行,而LIMIT可以允许更少的行)?
我的具体用例是动态SQL模式的修改,用于选择表的随机子样本.
这是我修改的sql源的链接.最简单的方法是查看那里定义的最终函数_random_select.它紧跟上述链接,但在输入表和输出结果集中已经被修改为多态,并且正确地说明了只返回输入表中已经存在的列的需要(还有另一个动态SQL)黑客row_number从最终结果集中排除中期结果).
这是一个眼睛,但它是我最接近可重复的例子.如果您使用_random_select并尝试从大于4500行的表中获取大约4500行的内容,则会开始以较高的概率看到较小的结果集,并且只会随着您增加所需样本的大小而变得更糟(因为重复的出现随着你想要的样本变大,情况会变得更糟)
请注意,在我的修改中,我没有使用_gaps此链接中的技巧,如果某个索引列中存在间隙,则意味着过度采样以抵消采样效率低下.那部分与这个问题无关,在我的情况下,我row_number用来确保有一个整数列,没有可能的间隙.
CTE的是递归的,以确保如果CTE的第一,非递归部分不给你足够的行(因为被去除重复的UNION),那么它会回去经过一轮又一轮的CTE的递归调用,并继续坚持更多的结果,直到你有足够的.
在链接的示例中,LIMIT使用,但我发现这不起作用.该方法返回的结果较少,因为最多LIMIT只能保证N行.
你如何获得至少 N行保证?选择TOPN行似乎是执行此操作的自然方式(因此递归CTE必须保持一直持续直到它获得足够的行来满足TOP条件),但这在Postgres中不可用.
sql postgresql recursive-query common-table-expression sql-limit
我的查询如下
SELECT w.payload,
       Count('payload') OVER () AS ROWCOUNT
FROM wholesale_confirmation.wholesale_order_confirmation w
WHERE w.delivery_date = COALESCE(NULL, w.delivery_date)
  AND w.ship_to_location_id = COALESCE(NULL, w.ship_to_location_id)
  AND w.order_raised_date = COALESCE(NULL, w.order_raised_date)
  AND w.ship_from_location_id = COALESCE(NULL, w.ship_from_location_id)
LIMIT 10
OFFSET 0;
这给了我这样的结果:
我想要{"payload:"[payload1,payload2,payload3],"rowcount":n}。
Postgres 10.3版,payload数据类型为jsonb
我有以下查询:
SELECT sum((select count(*) as itemCount) * "SalesOrderItems"."price") as amount, 'rma' as     
    "creditType", "Clients"."company" as "client", "Clients".id as "ClientId", "Rmas".* 
FROM "Rmas" JOIN "EsnsRmas" on("EsnsRmas"."RmaId" = "Rmas"."id") 
    JOIN "Esns" on ("Esns".id = "EsnsRmas"."EsnId") 
    JOIN "EsnsSalesOrderItems" on("EsnsSalesOrderItems"."EsnId" = "Esns"."id" ) 
    JOIN "SalesOrderItems" on("SalesOrderItems"."id" = "EsnsSalesOrderItems"."SalesOrderItemId") 
    JOIN "Clients" on("Clients"."id" = "Rmas"."ClientId" )
WHERE "Rmas"."credited"=false AND "Rmas"."verifyStatus" IS NOT null 
GROUP BY "Clients".id, "Rmas".id;
问题是表"EsnsSalesOrderItems"可以EsnId在不同的条目中具有相同的表.我想将查询限制为仅拉取"EsnsSalesOrderItems"具有相同的最后一个条目"EsnId".
"最后"条目我指的是以下内容:
表中最后出现的那个"EsnsSalesOrderItems".因此,例如,如果"EsnsSalesOrderItems"有两个条目和"EsnId" = 6和 …
sql-limit ×10
sql ×8
postgresql ×7
aggregate ×2
mysql ×2
db2 ×1
exists ×1
ibm-midrange ×1
join ×1
jsonb ×1
max ×1
pagination ×1
sql-order-by ×1
sql-update ×1