sql - 如何使用自连接来查找组内的相等值?

标签 sql database oracle

我正在寻找所有价格值为 0 的 GROUPID 实例。以下是我正在查看的内容的简化版本

--------------------------------
| Groupid | Price    | Customer|
--------------------------------
| 001     |  9       |  4      |
| 001     |  0       |  4      | 
| 002     |  4       |  4      |
| 002     |  4       |  4      |
| 003     |  0       |  4      |
| 003     |  0       |  4      |
| 004     |  4       |  4      |
| 004     |  7       |  4      |
--------------------------------

我尝试使用以下查询来查找所有 GROUPID,其中该特定组的两个 PRICE 值都 = 0。

SELECT * FROM MYTABLE WHERE GROUPID IN
(SELECT TB1.GROUPID FROM MYTABLE TB1 JOIN MYTABLE TB2 ON TB1.GROUPID = TB2.GROUPID
AND TB1.PRICE = 0 AND TB2.PRICE = 0)
and CUSTOMER = 4
ORDER BY GROUPID;

此查询返回:

| Groupid | Price    | Customer|
--------------------------------
| 001     |  9       |  4      |
| 001     |  0       |  4      | 
| 003     |  0       |  4      |
| 003     |  0       |  4      |
--------------------------------

就我而言,我只需要它返回 GROUPID 003。

我还想请求帮助修改查询以返回 groupid 内所有非 0 相等的 PRICE 值。它不必与上面的查询位于同一查询中。例如,返回结果为:

| Groupid | Price    | Customer|
--------------------------------
| 002     |  4       |  4      |
| 002     |  4       |  4      |

如有任何帮助,我们将不胜感激。感谢您抽出时间。

最佳答案

如果所有价格都为零,则查看该 groupid 的最低和最高价格:

select groupid
from mytable t
group by groupid
having min(price) = 0 and max(price) = 0;

我应该指出,这不需要自加入。

关于sql - 如何使用自连接来查找组内的相等值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41168436/

相关文章:

ios - 将整数上传到 Firebase 数据库 IOS 的按钮

database - Oracle 数据库统计应该多久运行一次?

php - mysql查询更新字段错误

sql - 如何跨表执行简单的单语句 SQL 搜索?

mysql - 使用 DEFAULT 和不使用它在 SQL 中创建带排序规则的数据库有什么区别?

regex - 如何在oracle中提取字符串的特定部分?

sql - Oracle Trigger If 语句条件以某种方式未被满足?

c# - 使用 C# 在 SQL Server 上执行 sql 文件

database - 如果我降级我的 PostgreSQL,我的 postgres 数据库会发生什么?

php - 启动 session 获取 session id并将其写入数据库