gpt4 book ai didi

sql - 在奇数行上使用 TOP 时重复行

转载 作者:行者123 更新时间:2023-12-04 05:01:25 24 4
gpt4 key购买 nike

我正在使用以下查询生成 2 个表单,每个表单都显示表中项目的一半。这将选择上半部分:

SELECT TOP 50 PERCENT * FROM products
ORDER BY products.product_ID;

这选择了下半部分
SELECT TOP 50 PERCENT * FROM products
ORDER BY products.product_ID DESC;

显而易见的问题是,当项目为奇数时,中间项目会显示在两个表单上。
我尝试以各种方式使用 COUNT() 函数解决它,但它不适用于 TOP。我还能怎么做?

最佳答案

定义前半部分时忽略奇数行问题。然后将后半部分定义为前半部分中不存在的那些行。您可以使用带有 IN() 的子查询,但是一个 LEFT JOIN这样的方法可能会更快。

SELECT secondhalf.*
FROM
products AS secondhalf
LEFT JOIN
(
SELECT TOP 50 PERCENT product_ID
FROM products
ORDER BY product_ID ASC
) AS firsthalf
ON secondhalf.product_ID = firsthalf.product_ID
WHERE firsthalf.product_ID Is Null;

子查询 firsthalf 与您问题中的第一个查询几乎相同。但在这种情况下,我们只需要 product_ID从那个子查询。
LEFT JOIN在主查询中意味着它将返回来自 products 的所有行... 那些匹配 firsthalf.product_ID加上那些不匹配的。然后是 WHERE子句过滤掉匹配...只留下 product与子查询行不匹配的行。

如果保存 products 可能更容易理解使用不同的名称,创建一个新的 products只包含几行,然后尝试查询。丢弃 WHERE条款并将第一行更改为 SELECT firsthalf.product_ID, secondhalf.product_ID .

关于sql - 在奇数行上使用 TOP 时重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16114347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com