2012-11-11 113 views
1

這裏的順序是名爲commonprofit表:查詢結果的SQLite中

name date turnover 
1 2011/12 42359 
1 2010/12 32863 
1 2009/12 24293 
1 2008/12 16436 
1 2007/12 15442 
2 2011/12 91634 
2 2010/12 58410 
2 2009/12 50668 
2 2008/12 54297 
3 2009/12 12352 
3 2008/12 12352 
3 2007/12 14226 


select name,max(date) as date, turnover from commonprofit group by name 
union 
select name,min(date) as date,turnover from commonprofit group by name; 

的reslut是

name|date|turnover 
00001|2007/12|15442 
00001|2011/12|42359 
00002|2008/12|54297 
00002|2011/12|91634 
00003|2007/12|14226 
00003|2009/12|12352 

爲什麼結果不是以下內容:

name|date|turnover 
00001|2011/12|42359 
00002|2011/12|91634 
00003|2009/12|12352 
00001|2007/12|15442 
00002|2008/12|54297 
00003|2007/12|14226 

我想要知道爲什麼序列不是我想要在SQLite查詢中的原因?

回答

0

如果你想要一個特定的訂單,你必須提供一個order by條款。例如,

select o, name, date, turnover from 
(
    select 'x' as o, name, max(date) as date, turnover from commonprofit group by name 
    union 
    select 'n' as o, name, min(date) as date, turnover from commonprofit group by name 
) 
order by o desc, name; 

x|1|2011/12|42359 
x|2|2011/12|91634 
x|3|2009/12|12352 
n|1|2007/12|15442 
n|2|2008/12|54297 
n|3|2007/12|14226 
0

原因是UNION刪除在其子查詢中重複的記錄。 爲了使查找重複更容易,SQLite對結果進行排序。

要避免此步驟,請使用UNION ALL而不是UNION。 (這意味着如果有一個name只有一個date,它會出現兩次。)