簡體   English   中英

比較相似的列是否相等

[英]Comparing Similar Columns for Equality

我有一個(簡化的)表,其結構如下:

Table: ItemData

PK | ItemID | StoreFK | Retail
1  | 100101 | 1       | 4.99
4  | 100101 | 2       | 4.99
7  | 100101 | 3       | 0.99
2  | 100102 | 1       | 6.99
5  | 100102 | 2       | 6.99
8  | 100102 | 3       | 6.99
3  | 100103 | 1       | 7.99
6  | 100103 | 2       | 8.99
9  | 100103 | 3       | 9.99

我想退回在一個或多個商店中零售價不同的所有商品:

返回值:

ItemID
100101 
100103 
  • 物品100101在商店3零售價較低,然后在商店12退回。

  • 商品100103在每個商店位置都有不同的零售,因此將其退回。

  • 物品100102在所有三個商店中的零售額均相等,因此不予退貨。

我對SQL並不陌生,但是對於如何在高效的庄園中進行這種不平等檢查,我一無所知。 根據另一列的分組檢查一列中是否相等的最佳方法是什么?

我能想到的最簡單的辦法是只比較每個平均ItemID每個具有最大(或最小為此事) ItemID

SQL語句將類似於

SELECT ItemID
FROM   ItemData
GROUP BY
       ItemID
HAVING MAX(Retail) <> AVG(Retail)

請注意,如果retail可為空,則存在方案的此方法失敗。

觀看此SQL Fiddle演示

另一種方法:但是我仍然喜歡@Liven的答案:)我的查詢也告訴您不同價格的數量

select x.itemid, count(x.storefk) from (
select a.* , 
row_number() over 
(partition by a.retail order by
                   a.itemid desc) as r
from retailers a)x
group by x.itemid, x.r
having count(*) > 1
;

結果:根據OP更新的問題和數據。

| ITEMID | COLUMN_1 |
---------------------
| 100101 |        2 |
| 100103 |        3 |
SELECT *
  FROM ItemData
  WHERE itemID IN ( SELECT itemID
                      FROM ItemData
                      GROUP BY itemID
                      HAVING COUNT(DISTINCT Retail) > 1
                  )

出於對Lieven的所有應有的尊重,我更願意這樣做:

SELECT ItemID
FROM   ItemData
GROUP BY
       ItemID
HAVING COUNT(DISTINCT Retail)>1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM