如何 select 来自 X 列的唯一列,但显示来自 SQL 中结果的 X + Y 列?
How to select unique columns from X columns but show X + Y columns from the results in SQL?
这个 table 在我们的 impala 集群上,尽管 impala shell 看起来与 SQL 非常相似。除了进行极其简单的查询之外,我几乎没有 SQL 或 Impala 经验,所以这个问题可能远远超出我的经验和薪水等级。
我需要使用 impala 从我们的数据库中获取一些数据。 table 中还有其他列,但我的命令获取了我感兴趣的这 3 列。data/result 可以如下所示:
time | server | data
0 | A | 500
0 | B | 200
0 | C | 300
1 | A | 100
1 | A | 400
1 | B | 200
1 | C | 300
2 | A | 900
2 | B | 800
2 | C | 700
2 | C | 600
理想情况下,数据应该看起来像时间 0,其中每个服务器只针对每个时间值显示一次。但是,有一个错误,如图所示,服务器可以多次显示一个时间值。而且它也不是同一台服务器,每个时间值显示不止一次,如上例所示。
无论如何,我读取 up/look 什么 impala-shell/SQL 命令告诉它 select 不同的时间和服务器但选择两个数据值中的较大值?我不知道如何继续过去:
select distinct time, server from table;
如果这太难或太复杂,也许有人可以向我指出一个命令,该命令 select 具有不同的时间和服务器,但打印它为不同的时间和服务器对找到的第一个数据值。
要获取唯一时间和服务器值以及最大数据值,您可以使用带有 GROUP BY
的查询,如下所示:
SELECT TIME, SERVER, MAX(DATA)
FROM TABLE
GROUP BY TIME, SERVER
ORDER BY TIME, SERVER;
希望对您有所帮助。
分享和享受。
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> create table test_tabl(time int, server varchar(10), data int);
Query OK, 0 rows affected (0.03 sec)
mysql> insert into test_tabl values(0, 'A', 500), (0, 'B', 200), (0, 'C', 300);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> insert into test_tabl values(1, 'A', 100), (1, 'A', 400), (1, 'B', 200), (1, 'C', 300);
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> insert into test_tabl values(2, 'A', 900), (2, 'B', 800), (2, 'C', 700), (2, 'C', 600);
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> select * from test_tabl;
+------+--------+------+
| time | server | data |
+------+--------+------+
| 0 | A | 500 |
| 0 | B | 200 |
| 0 | C | 300 |
| 1 | A | 100 |
| 1 | A | 400 |
| 1 | B | 200 |
| 1 | C | 300 |
| 2 | A | 900 |
| 2 | B | 800 |
| 2 | C | 700 |
| 2 | C | 600 |
+------+--------+------+
11 rows in set (0.00 sec)
mysql>
mysql> select time, server, max(data) from test_tabl group by time, server;
+------+--------+-----------+
| time | server | max(data) |
+------+--------+-----------+
| 0 | A | 500 |
| 0 | B | 200 |
| 0 | C | 300 |
| 1 | A | 400 |
| 1 | B | 200 |
| 1 | C | 300 |
| 2 | A | 900 |
| 2 | B | 800 |
| 2 | C | 700 |
+------+--------+-----------+
9 rows in set (0.00 sec)
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)
这个 table 在我们的 impala 集群上,尽管 impala shell 看起来与 SQL 非常相似。除了进行极其简单的查询之外,我几乎没有 SQL 或 Impala 经验,所以这个问题可能远远超出我的经验和薪水等级。
我需要使用 impala 从我们的数据库中获取一些数据。 table 中还有其他列,但我的命令获取了我感兴趣的这 3 列。data/result 可以如下所示:
time | server | data
0 | A | 500
0 | B | 200
0 | C | 300
1 | A | 100
1 | A | 400
1 | B | 200
1 | C | 300
2 | A | 900
2 | B | 800
2 | C | 700
2 | C | 600
理想情况下,数据应该看起来像时间 0,其中每个服务器只针对每个时间值显示一次。但是,有一个错误,如图所示,服务器可以多次显示一个时间值。而且它也不是同一台服务器,每个时间值显示不止一次,如上例所示。
无论如何,我读取 up/look 什么 impala-shell/SQL 命令告诉它 select 不同的时间和服务器但选择两个数据值中的较大值?我不知道如何继续过去:
select distinct time, server from table;
如果这太难或太复杂,也许有人可以向我指出一个命令,该命令 select 具有不同的时间和服务器,但打印它为不同的时间和服务器对找到的第一个数据值。
要获取唯一时间和服务器值以及最大数据值,您可以使用带有 GROUP BY
的查询,如下所示:
SELECT TIME, SERVER, MAX(DATA)
FROM TABLE
GROUP BY TIME, SERVER
ORDER BY TIME, SERVER;
希望对您有所帮助。
分享和享受。
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> create table test_tabl(time int, server varchar(10), data int);
Query OK, 0 rows affected (0.03 sec)
mysql> insert into test_tabl values(0, 'A', 500), (0, 'B', 200), (0, 'C', 300);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> insert into test_tabl values(1, 'A', 100), (1, 'A', 400), (1, 'B', 200), (1, 'C', 300);
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> insert into test_tabl values(2, 'A', 900), (2, 'B', 800), (2, 'C', 700), (2, 'C', 600);
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> select * from test_tabl;
+------+--------+------+
| time | server | data |
+------+--------+------+
| 0 | A | 500 |
| 0 | B | 200 |
| 0 | C | 300 |
| 1 | A | 100 |
| 1 | A | 400 |
| 1 | B | 200 |
| 1 | C | 300 |
| 2 | A | 900 |
| 2 | B | 800 |
| 2 | C | 700 |
| 2 | C | 600 |
+------+--------+------+
11 rows in set (0.00 sec)
mysql>
mysql> select time, server, max(data) from test_tabl group by time, server;
+------+--------+-----------+
| time | server | max(data) |
+------+--------+-----------+
| 0 | A | 500 |
| 0 | B | 200 |
| 0 | C | 300 |
| 1 | A | 400 |
| 1 | B | 200 |
| 1 | C | 300 |
| 2 | A | 900 |
| 2 | B | 800 |
| 2 | C | 700 |
+------+--------+-----------+
9 rows in set (0.00 sec)
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)