首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >比较相似的列以求平等

比较相似的列以求平等
EN

Stack Overflow用户
提问于 2013-01-11 21:47:34
回答 4查看 166关注 0票数 1

我有一个(简化的)表,其结构如下:

代码语言:javascript
运行
复制
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

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

返回:

代码语言:javascript
运行
复制
ItemID
100101 
100103 
  • 商品1001013商店的零售额比在1 & 2商店的零售额要低,它是返回的。
  • Item 100103在每个商店位置都有不同的零售,因此它会被返回。
  • 项目100102在所有三家商店的零售中都是相等的,因此它不会被返回。

我对SQL并不陌生,但我不知道如何在高效的庄园中检查这种不平等。根据另一列的分组,检查一列中是否相等的最佳方法是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-11 22:55:46

恕我直言,我更喜欢这样:

代码语言:javascript
运行
复制
SELECT ItemID
FROM   ItemData
GROUP BY
       ItemID
HAVING COUNT(DISTINCT Retail)>1
票数 1
EN

Stack Overflow用户

发布于 2013-01-11 21:59:42

我能想到的最简单的解决方案是将每个ItemID的平均值与每个ItemID的最大值(或最小值)进行比较。

SQL语句将类似于

代码语言:javascript
运行
复制
SELECT ItemID
FROM   ItemData
GROUP BY
       ItemID
HAVING MAX(Retail) <> AVG(Retail)

注意,如果retail为空,则方案的此方法将失败。

参见此演示

票数 5
EN

Stack Overflow用户

发布于 2013-01-11 22:15:03

另一种方法是:但我仍然喜欢@Liven的回答:)我的查询也告诉您不同价格的数量。

代码语言:javascript
运行
复制
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的最新问题和数据。

代码语言:javascript
运行
复制
| ITEMID | COLUMN_1 |
---------------------
| 100101 |        2 |
| 100103 |        3 |
  • SQLFIDDLE演示
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14287188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档