我在Hive中创建了一个表,在其中我将order_id字段定义为字符串。但是它具有整数值。
现在,当我运行以下SQL时,我会得到不正确的结果。
select * from orders_string2 Order by order_id limit 10;
1 2013-07-25 00:00:00.0 11599 CLOSED
10 2013-07-25 00:00:00.0 5648 PENDING_PAYMENT
100 2013-07-25 00:00:00.0 12131 PROCESSING
1000 2013-07-30 00:00:00.0 2321 CLOSED
10000 2013-09-25 00:00:00.0 8983 PROCESSING
10001 2013-09-25 00:00:00.0 316 PENDING_PAYMENT
10002 2013-09-25 00:00:00.0 1530 COMPLETE
10003 2013-09-25 00:00:00.0 8099 COMPLETE
10004 2013-09-25 00:00:00.0 7768 CLOSED
10005 2013-09-25 00:00:00.0 541 COMPLETE
SQL以下给出了正确的结果:
select * from orders_string2 order by int(order_id) limit 10;
1 2013-07-25 00:00:00.0 11599 CLOSED
2 2013-07-25 00:00:00.0 256 PENDING_PAYMENT
3 2013-07-25 00:00:00.0 12111 COMPLETE
4 2013-07-25 00:00:00.0 8827 CLOSED
5 2013-07-25 00:00:00.0 11318 COMPLETE
6 2013-07-25 00:00:00.0 7130 COMPLETE
7 2013-07-25 00:00:00.0 4530 COMPLETE
8 2013-07-25 00:00:00.0 2911 PROCESSING
9 2013-07-25 00:00:00.0 5657 PENDING_PAYMENT
10 2013-07-25 00:00:00.0 5648 PENDING_PAYMENT
现在,当我遵循SQL时,我期望结果不正确。但是效果很好。
select * from orders_string2 where order_id > 100 limit 10;
101 2013-07-25 00:00:00.0 5116 CLOSED
102 2013-07-25 00:00:00.0 8027 COMPLETE
103 2013-07-25 00:00:00.0 12256 PROCESSING
104 2013-07-25 00:00:00.0 7790 PENDING_PAYMENT
105 2013-07-26 00:00:00.0 8220 COMPLETE
106 2013-07-26 00:00:00.0 395 PROCESSING
107 2013-07-26 00:00:00.0 1845 COMPLETE
108 2013-07-26 00:00:00.0 12149 PROCESSING
109 2013-07-26 00:00:00.0 9345 PENDING_PAYMENT
110 2013-07-26 00:00:00.0 2746 COMPLETE
这也可以正常工作,不需要铸造。从orders_string2选择count(*(68783
有人可以揭示这一点吗?为什么在哪里进行排序子句的工作方式不同?
在SQL字符串中按字母顺序排序。因此," 1"," 10"one_answers" 100"都在" 2"之前出现,就像" a"," ab"one_answers" abc"的方式一样。这解释了前两个查询。
运行此查询时:
select *
from orders_string2
where order_id > 100
limit 10;
您没有order by
。可以返回与where
条件匹配的任何10个记录。您是"幸运的",他们是您所期望的。
如果添加了order by order_id
,则您将在问题中的数据上获得其他集合。