麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數(shù)據(jù)庫 > 文庫 > 正文

Hive SQL去重a b和b a類別

2024-09-07 22:12:57
字體:
供稿:網(wǎng)友
  昨天開發(fā)找到我們DBA,要我們寫一條Hive SQL。
 
  需求:
 
  有一個(gè)t表,主要有機(jī)場名稱airport,機(jī)場的經(jīng)緯度distance這兩個(gè)列組成,想得到所有距離小于100的兩個(gè)機(jī)場名。
 
  其實(shí)寫這個(gè)SQL的邏輯并不是很困難,難點(diǎn)是如何去重復(fù)值,
 
  我用MySQL模擬的一個(gè)表,其實(shí)Hive語法和SQL差不多,插入了三條數(shù)據(jù),a, b, c 分別代表三個(gè)機(jī)場名稱,結(jié)構(gòu)如下:
 
  mysql> show create table t/G
  *************************** 1. row ***************************
         Table: t
  Create Table: CREATE TABLE `t` (
    `airport` varchar(10) DEFAULT NULL,
    `distant` int(11) DEFAULT NULL
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8
  1 row in set (0.00 sec)
 
  mysql> select * from t;
  +---------+---------+
  | airport | distant |
  +---------+---------+
  | a       |     130 |
  | b       |     140 |
  | c       |     150 |
  +---------+---------+
  3 rows in set (0.00 sec)
  通過!=篩選掉本機(jī)場自己之間的比較,用abs函數(shù)取絕對值得到位置小于100的兩個(gè)機(jī)場
 
  mysql> select t1.airport, t2.airport from t t1,t t2 where t1.airport != t2.airport and abs(t1.distant-t2.distant) < 100;
  +---------+---------+
  | airport | airport |
  +---------+---------+
  | b       | a       |
  | c       | a       |
  | a       | b       |
  | c       | b       |
  | a       | c       |
  | b       | c       |
  +---------+---------+
  6 rows in set (0.00 sec)
  但是問題來了,(b,a) 與(a,b),(c,a)與(a,c),(c,b)與(b,c)這里被我們視為重復(fù)值,我們只需要得到其中某一行的數(shù)據(jù),就知道是哪兩個(gè)機(jī)場名了,那么,如何去掉這個(gè)重復(fù)值呢?
 
  貌似distinct,group by都派不上用場了,最后咨詢了一位資深的SQL高手,找到了這么一個(gè)函數(shù)hex(),可以把一個(gè)字符轉(zhuǎn)化成十六進(jìn)制,Hive也有對應(yīng)的函數(shù),效果如下:
 
  mysql> select t1.airport,hex(t1.airport), t2.airport,hex(t2.airport) from t t1,t t2 where t1.airport != t2.airport and abs(t1.distant-t2.distant) < 100;
  +---------+-----------------+---------+-----------------+
  | airport | hex(t1.airport) | airport | hex(t2.airport) |
  +---------+-----------------+---------+-----------------+
  | b       | 62              | a       | 61              |
  | c       | 63              | a       | 61              |
  | a       | 61              | b       | 62              |
  | c       | 63              | b       | 62              |
  | a       | 61              | c       | 63              |
  | b       | 62              | c       | 63              |
  +---------+-----------------+---------+-----------------+
  6 rows in set (0.00 sec)
  這樣我們就可以通過比較機(jī)場1和機(jī)場2的大小,來去掉重復(fù)值了
 
  mysql> select t1.airport, t2.airport from t t1,t t2 where t1.airport != t2.airport and hex(t1.airport) < hex(t2.airport) and abs(t1.distant-t2.distant) < 100;
  +---------+---------+
  | airport | airport |
  +---------+---------+
  | a       | b       |
  | a       | c       |
  | b       | c       |
  +---------+---------+
  3 rows in set (0.00 sec)
  最后再優(yōu)化一下,結(jié)果如下:
 
  mysql> select t1.airport, t2.airport from t t1,t t2 where hex(t1.airport) < hex(t2.airport) and abs(t1.distant-t2.distant) < 100;
  +---------+---------+
  | airport | airport |
  +---------+---------+
  | a       | b       |
  | a       | c       |
  | b       | c       |
  +---------+---------+
  3 rows in set (0.00 sec)

(編輯:武林網(wǎng))

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 欧美性a视频 | 久久久久亚洲国产精品 | av噜噜在线| 欧美五月婷婷 | av观看国产 | 成人毛片免费看 | 中国成人在线视频 | 依依成人综合 | 国产精品啪一品二区三区粉嫩 | 午夜精品区| 羞羞视频免费观看入口 | av电影免费播放 | 国产日产精品一区二区三区四区 | 91网页视频入口在线观看 | 91麻豆精品国产91久久久无需广告 | 欧美一区二区片 | 少妇一级淫片免费放播放 | 一区二区三区日韩电影 | 在线成人免费观看 | 国产精品91在线 | 制服丝袜成人动漫 | 国产免费久久久久 | 国产一级在线免费观看 | 国产精品一区网站 | 国产在线观看91精品 | 久久久久免费精品国产小说色大师 | 失禁高潮抽搐喷水h | 一级黄色在线观看 | vidz 98hd| 中文字幕在线观看亚洲 | 91麻豆蜜桃一区二区三区 | 久久久久久久99 | 一区二区三区视频在线播放 | 19禁国产精品福利视频 | 欧美精品电影一区 | av电影网在线观看 | 免费久久精品 | 曰韩黄色片 | www.精品视频| 欧美一级黄色网 | 91短视频网页版 |