【发布时间】:2021-02-25 09:49:00
【问题描述】:
我有类似的表:
| GROUP | NAME | Value_1 | Value_2 |
|---|---|---|---|
| 1 | ABC | 0 | 0 |
| 1 | DEF | 4 | 4 |
| 50 | XYZ | 6 | 6 |
| 50 | QWE | 6 | 7 |
| 100 | XYZ | 26 | 2 |
| 100 | QWE | 26 | 2 |
我想做的是按组分组并选择具有最高值的名称_1。如果它们的 value_1 相同,则与 value_2 比较并选择最大值。如果它们仍然相同,请选择第一个。 输出将类似于:
| GROUP | NAME | Value_1 | Value_2 |
|---|---|---|---|
| 1 | DEF | 4 | 4 |
| 50 | QWE | 6 | 7 |
| 100 | XYZ | 26 | 2 |
对我来说,这里的挑战是我不知道 NAME 中有多少个类别,所以一个简单的情况下不起作用。感谢帮助
【问题讨论】:
-
请将您的示例数据格式化为表格,以便其可读,即第一行是列标题,后续行是数据
-
嗨,你不需要在那里使用用例。您最有可能使用一些窗口函数,也许还有一些 CTE。如果您提供您使用的数据库以及dba.stackexchange.com/help/minimal-reproducible-example 中的一些脚本,那么建议一些东西会更容易
-
你的意思是“如果它们仍然相同,请选择第一个。”?
-
关系表没有记录顺序的概念——因此每次运行查询时“选择第一个”可能会返回不同的值。如果要返回特定值,则需要定义识别该值的逻辑,例如最低值、最高值等
-
谢谢,我去看看。实际上我只是学习 SQL,所以这里超级新。选择第一个意味着如果两个名称之间的 value_1 和 value_2 都相等,则选择第一行。您在示例 XYZ 中看到,组 100 中的 QWR 相同,因此选择了 XYZ。
标签: sql