【问题标题】:How to filter a Query Sql so that it shows only one value when more rows of the same table have two identical values?如何过滤 Query Sql 使其在同一张表的多个行具有两个相同值时仅显示一个值?
【发布时间】:2020-07-02 14:07:09
【问题描述】:

示例: 我有一个包含 6 列的“人”表:id、name、lastname、age、job、genre。 我需要进行查询 SELECT 以便当一个人的年龄和工作都相同时它只显示一个值。

人:

+--------+------------+--------+--------+---------+
| id     | name       |lastname| age    | job     |
+--------+------------+--------+--------+---------+
|    101 | francesco  | pieri  | 18     | soldier | 
|    102 | martin     | gofman | 25     | grocer  | 
|    103 | paulina    | arani  | 44     | engineer| 
|    104 | george     | gobelt | 25     | grocer  |
|    105 | marcus     | derona | 18     | soldier |
+--------+------------+--------+--------+---------+

我希望结果显示像这样

+--------+------------+--------+--------+---------+
| id     | name       |lastname| age    | job     |
+--------+------------+--------+--------+---------+
|    101 | francesco  | pieri  | 18     | soldier | 
|    102 | martin     | gofman | 25     | grocer  | 
|    103 | paulina    | arani  | 44     | engineer| 
+--------+------------+--------+--------+---------+

我不关心行的顺序或分组方式,只需要显示一次具有相同年龄和工作的行。

我尝试了一些分区依据和行号,但只找到了单个字段条件的示例,我不知道如何将其与我的个人案例合并。

【问题讨论】:

  • 我删除了不一致的数据库标签。仅使用您真正使用的数据库进行标记。

标签: sql database


【解决方案1】:

您可以为此使用row_number()

select t.*
from (select t.*, row_number() over (partition by age, job order by id) as seqnum
      from t
     ) t
where seqnum = 1;

【讨论】:

    猜你喜欢
    • 2021-09-20
    • 2023-03-30
    • 2021-09-07
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 2013-02-22
    相关资源
    最近更新 更多