选择缺少值的组中的唯一行

时间:2018-07-15 04:45:54

标签: sql hive presto

我有一个包含两列的表,其中一列的值可能会丢失。第一列是ID,第二列是value。  我想为唯一ID选择行,这样,如果有多个具有相同ID的行,但是其中一些具有缺失值,则返回具有现有值的其中之一。如果所有ID为ID的行都为空,则返回其中任何一个。

换句话说,只要两行具有相同的ID,它们就应该属于同一组。但是,在每个组中,如果存在,则返回具有“值”的组。

例如, 输入表。

+--------+---------+
|    ID  |  VALUE  |
+------------------+
| x      | 1       |
| x      | 1       |
| y      | 2       |
| y      |         |
| z      |         |
| z      |         |
+------------------+

应返回:

+------------+---------+
|    ID      |  VALUE  |
+------------+---------+
| x          | 1       |
| y          | 2       |
| z          |         |
+------------+---------+

3 个答案:

答案 0 :(得分:1)

根据您的描述,您可以只使用format

class App extends Component {
  state = {
    userInput: ""
  };

  inputChangedHandler = values => {
    this.setState({ userInput: values.value });
  };

  render() {
    const { userInput } = this.state;

    return (
      <div className="App">
        <NumberFormat
          format={userInput.toString().length < 11 ? "(###) ###-#####" : undefined}
          name="phoneNumberInput"
          placeholder="Phone Number Here"
          onValueChange={this.inputChangedHandler}
          value={userInput}
        />
        <p>
          <strong>Value: </strong>+1{userInput}
        </p>
      </div>
    );
  }
}

如果您要添加其他列,请使用max()

select id, max(value)
from t
group by id;

答案 1 :(得分:0)

您可以轻松地将查询分为两个查询:

A: 1- find unique row with DISTINCT on (ID,Value) which are not empty VALUE
B: 2- find unique row with DISTINCT on ID which are empty in VALUE and ID not in(A(ID))

A U(B-A)

答案 2 :(得分:0)

您可以在hive / sql中使用 distinct函数

hive> select distinct id,value from <db_name>.<table_name>; 

上述查询将在 id,value

中返回不同的值
hive> select distinct * from <db_name>.<table_name>; 

上面的语句用于仅基于所有列返回不同(不同)的值。