Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在子查询中按降序排序?_Sql_Postgresql - Fatal编程技术网

Sql 在子查询中按降序排序?

Sql 在子查询中按降序排序?,sql,postgresql,Sql,Postgresql,我有一个SQL查询,它统计属于所有现有轮询的所有轮询选项的所有投票。这很好,但现在我想实现分页,它首先返回最新的轮询。我试着这样做: SELECT offset_polls.id AS pollId, offset_polls.title, poll_options.id AS pollOptionId, text, vote_count FROM ( SELECT * FROM polls ORDER BY id DESC LIMIT 10 OFFSET 0 ) as offset_

我有一个SQL查询,它统计属于所有现有
轮询的所有
轮询选项的所有
投票。这很好,但现在我想实现分页,它首先返回最新的
轮询。我试着这样做:

SELECT offset_polls.id AS pollId, offset_polls.title, poll_options.id AS pollOptionId, text, vote_count 
FROM (
    SELECT * FROM polls ORDER BY id DESC LIMIT 10 OFFSET 0
) as offset_polls 
JOIN poll_options ON poll_options.poll_id = offset_polls.id 
LEFT OUTER JOIN (
    SELECT poll_option_id, COUNT(poll_option_id) as vote_count 
    FROM votes 
    GROUP BY poll_option_id 
) as votesCount ON  poll_options.id = votesCount.poll_option_id
ORDER BY offset_polls.id desc
问题是第一个子查询忽略ORDERBY-是的,我知道这样做是SQL标准。按照我的方式,没有返回任何行。如果在第一个子查询中不使用
orderby
,则整个查询都是“预期的”,但是
轮询
当然是从最早的查询返回到最新的查询。如何在SQL中解决这个问题?我可以获取所有行并在之后对它们进行分页,但我非常确定这将是低效的(在Node.js中工作)

编辑


上述查询按预期工作。“bug”在我的数据库种子文件中

我检查了您的示例数据,没有发现postgresql的行为有任何问题。当您运行查询时会发生什么

SELECT * FROM polls ORDER BY id DESC LIMIT 10 OFFSET 0
它返回具有以下id的所有轮询:
20
19
18
,…,
11
。然后,您使用
poll\u options
连接这些行,但由于该范围内没有
poll\u id
的行,因此将一无所获:

# SELECT * FROM poll_options WHERE poll_id BETWEEN 11 AND 20;
 id | text | poll_id 
----+------+---------
(0 rows)

如果从
offset\u polls
子查询中删除
ORDER BY
子句,那么它将包括10个“随机”行,其中可能有一些轮询选项,这就是查询返回一些行的原因。因此,在本例中,
ORDER BY
不会被忽略,其行为完全符合您的预期。

您能提供样本数据+当前结果与预期结果吗?@sstan这将是样本数据:。如前所述,当我运行上述查询时,得到0行。我希望它返回类似这样的内容:,只是它只返回10个(
LIMIT 10
)最近的(
ORDER BY id DESC
)民意测验及其选项和聚合投票。但是我不知道如何去做,除了在我的第一个子查询中使用
orderby
过滤10个最近的民意测验。是的,谢谢。事实证明,当我在播种
poll\u选项时,我只将它们添加到前10个轮询(1-10),因此当尝试获取轮询(11-20)时,当
加入
poll\u选项时,它们不会返回任何行。查询本身按预期工作。