oracle SQL值更改

t3psigkw  于 2023-01-12  发布在  Oracle
关注(0)|答案(1)|浏览(124)

假设我有一个表t1:
| 产品编号|价格|
| - ------|- ------|
| 1个|第1页|
| 1个|第二页|
| 第二章|第1页|
| 第二章|第1页|
| 第二章|第1页|
我想知道的是,对于一个唯一的产品id我想看看是否有一个新的价格。
对于特定的产品ID,只具有常数值是不重要的。
希望你能给点建议。
最好的问候
我的想法是"选择产品ID",其中distinct(count(price))〉1。这应该只给我价格变化的产品ID?
如果一个产品id只有相同的价格而没有变化,那么选择它是没有意义的。

ljsrvy3e

ljsrvy3e1#

您检查COUNT(DISTINCT price > 1)的想法是正确的。
我们只需要在HAVING子句中使用GROUP BY

SELECT product_id
FROM t1
GROUP BY product_id
HAVING COUNT (DISTINCT price) > 1
ORDER BY product_id;

如果还应显示不同的价格,则此查询可用作子查询。例如:

SELECT product_id, price
FROM t1
WHERE product_id IN 
(SELECT product_id
FROM t1
GROUP BY product_id
HAVING COUNT (DISTINCT price) > 1)
ORDER BY product_id;

或者我们可以使用JOIN而不是IN,后者的性能更好:

SELECT t1.product_id, t1.price
FROM t1
JOIN  
(SELECT product_id
FROM t1
GROUP BY product_id
HAVING COUNT (DISTINCT price) > 1) sub
ON t1.product_id = sub.product_id
ORDER BY t1.product_id;

我们可以在这里尝试这些查询:db<>fiddle

相关问题