sql查询 查询TABLE_NAME, column_name, data_type, COLUMN_TYPE, ORDINAL_POSITION, 先根据TABLE_NAME排序,再根据ORDINAL_POSITION排序,再根据TABLE_NAME分组取每组的第一条
时间: 2023-09-18 10:15:58 浏览: 69
可以使用以下 SQL 语句完成你的需求:
```
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, COLUMN_TYPE, ORDINAL_POSITION
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY TABLE_NAME ORDER BY ORDINAL_POSITION) AS row_num
FROM information_schema.columns
ORDER BY TABLE_NAME, ORDINAL_POSITION
) t
WHERE t.row_num = 1
```
这个 SQL 语句使用了子查询和窗口函数来实现你的需求:
- 子查询:将 `information_schema.columns` 中的所有列按照 `TABLE_NAME` 和 `ORDINAL_POSITION` 排序,并为每个 `TABLE_NAME` 分配一个行号 `row_num`,然后将结果作为子查询。
- 窗口函数:使用 `ROW_NUMBER()` 窗口函数为每个 `TABLE_NAME` 分配行号,让子查询中的 `row_num` 列成为可用的列。
最后,将子查询的结果作为 `t` 表,并在外部查询中过滤出每个 `TABLE_NAME` 的第一行,即 `t.row_num = 1`。
相关问题
impala sql查询 查询TABLE_NAME, column_name, data_type, COLUMN_TYPE, ORDINAL_POSITION, 先根据TABLE_NAME排序,再根据ORDINAL_POSITION排序,再根据TABLE_NAME分组取每组的第一条
你好!针对你的问题,可以使用如下的 Impala SQL 查询语句实现:
```
SELECT TABLE_NAME, column_name, data_type, COLUMN_TYPE, ORDINAL_POSITION
FROM (
SELECT TABLE_NAME, column_name, data_type, COLUMN_TYPE, ORDINAL_POSITION,
ROW_NUMBER() OVER (PARTITION BY TABLE_NAME ORDER BY ORDINAL_POSITION) AS row_num
FROM information_schema.columns
ORDER BY TABLE_NAME, ORDINAL_POSITION
) t
WHERE row_num = 1
```
这个查询语句会从 `information_schema.columns` 系统表中查询出所有表的列信息,并按照 `TABLE_NAME` 和 `ORDINAL_POSITION` 两个字段进行排序。然后,使用 `ROW_NUMBER()` 窗口函数对每个表的列信息进行编号,分组取每组的第一条。最后,用外层的 `SELECT` 语句筛选出编号为 1 的行,即每个表的第一条列信息。
希望这个查询语句能够解决你的问题,如有疑问,欢迎继续提问。
mysql查询 查询TABLE_NAME, column_name, data_type, COLUMN_TYPE, ORDINAL_POSITION, 先根据TABLE_NAME排序,再根据ORDINAL_POSITION排序,再根据TABLE_NAME分组取每组的第一条
可以使用以下 SQL 语句完成你的需求:
```
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, COLUMN_TYPE, ORDINAL_POSITION
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY TABLE_NAME ORDER BY ORDINAL_POSITION) AS row_num
FROM information_schema.columns
ORDER BY TABLE_NAME, ORDINAL_POSITION
) t
WHERE t.row_num = 1
```
这个 SQL 语句使用了子查询和窗口函数来实现你的需求:
- 子查询:将 `information_schema.columns` 中的所有列按照 `TABLE_NAME` 和 `ORDINAL_POSITION` 排序,并为每个 `TABLE_NAME` 分配一个行号 `row_num`,然后将结果作为子查询。
- 窗口函数:使用 `ROW_NUMBER()` 窗口函数为每个 `TABLE_NAME` 分配行号,让子查询中的 `row_num` 列成为可用的列。
最后,将子查询的结果作为 `t` 表,并在外部查询中过滤出每个 `TABLE_NAME` 的第一行,即 `t.row_num = 1`。
阅读全文