> On 7/16/2012 4:19 PM, Luis Mochan wrote: > > What are the pros and cons of this approach vs. using a temporal table as > suggested by Keith? > My technique doesn't require a temp table so may be somewhat easier to > use. On the other hand, I suspect it might be much slower on a large table. > -- > Igor Tandetnik
First, the two queries only provide identical results if there are no duplicate values (that is, if column a does not have duplicate values). Also, the join is significantly slower even when there are relatively few rows. The first two examples use random integers between 0 and 100 for the values: Row(count_=100, avg_a=5.169999999999999, median_a=5.0, range_a=5.0, kurt_a=-0.7673160376085967, skew_a=-0.23402554873733777) Row(count_=100, avg_a=14.879999999999994, median_a=15.0, range_a=5.0, kurt_a=-1.0457937617771582, skew_a=0.1118056000984518) Row(count_=100, avg_a=25.709999999999994, median_a=25.5, range_a=5.5, kurt_a=-1.2157313706228008, skew_a=-0.09270685801695283) Row(count_=100, avg_a=35.41000000000001, median_a=35.5, range_a=4.5, kurt_a=-1.2394952074411363, skew_a=-0.004471604259021051) Row(count_=100, avg_a=45.62000000000002, median_a=45.5, range_a=5.5, kurt_a=-1.188530050739989, skew_a=-0.013766992804092316) Row(count_=100, avg_a=56.16999999999999, median_a=56.0, range_a=5.0, kurt_a=-1.2302196427237029, skew_a=-0.09962037212247572) Row(count_=100, avg_a=65.70000000000002, median_a=66.0, range_a=5.0, kurt_a=-1.109597203024603, skew_a=0.05897280879054656) Row(count_=100, avg_a=75.67000000000003, median_a=75.5, range_a=4.5, kurt_a=-0.9951976657441884, skew_a=-0.15967942413838576) Row(count_=100, avg_a=84.45, median_a=84.0, range_a=4.0, kurt_a=-1.1297545539336589, skew_a=-0.04298965686715164) Row(count_=100, avg_a=93.3, median_a=93.5, range_a=5.5, kurt_a=-1.3639028852910942, skew_a=0.15672217508773303) -------- Row(count_=110, avg_a=5.609090909090909, median_a=5.0, range_a=5.0, kurt_a=-0.8681830185663603, skew_a=-0.24511717100205904) Row(count_=93, avg_a=15.56989247311828, median_a=15.5, range_a=4.5, kurt_a=-1.222032243151948, skew_a=0.18301471536628047) Row(count_=104, avg_a=26.23076923076923, median_a=26.0, range_a=5.0, kurt_a=-1.2571959480334132, skew_a=-0.11692195963318017) Row(count_=99, avg_a=35.99999999999999, median_a=36.0, range_a=4.0, kurt_a=-1.2782872114958477, skew_a=-0.054704969902452855) Row(count_=100, avg_a=46.27999999999999, median_a=46.0, range_a=5.0, kurt_a=-1.2600599777905384, skew_a=-0.06596351047839281) Row(count_=101, avg_a=56.81188118811879, median_a=56.5, range_a=4.5, kurt_a=-1.2605815048317308, skew_a=-0.15988297188842898) Row(count_=99, avg_a=66.35353535353535, median_a=66.5, range_a=4.5, kurt_a=-1.2007449849089082, skew_a=0.10449816306964632) Row(count_=99, avg_a=76.17171717171722, median_a=76.0, range_a=4.0, kurt_a=-1.110077438783383, skew_a=-0.07135502799103619) Row(count_=98, avg_a=84.78571428571428, median_a=84.5, range_a=3.5, kurt_a=-1.2825352149279434, skew_a=-0.015783320020137475) Row(count_=97, avg_a=93.46391752577317, median_a=94.0, range_a=5.0, kurt_a=-1.391177290060431, skew_a=0.15176251761348683) For 1000 values Create Values 0.0 Temp Table 0.0160000324249 Direct Select 0.405999898911 Row(count_=1000, avg_a=4.3240000000000025, median_a=4.5, range_a=4.5, kurt_a=-1.2871745643913286, skew_a=0.08265273281471515) Row(count_=1000, avg_a=14.206999999999999, median_a=14.0, range_a=5.0, kurt_a=-1.1021251623308883, skew_a=0.06997178911239374) Row(count_=1000, avg_a=24.133000000000028, median_a=24.0, range_a=5.0, kurt_a=-1.178795322586656, skew_a=0.025951906115470408) Row(count_=1000, avg_a=34.246, median_a=34.0, range_a=5.0, kurt_a=-1.2138088064962176, skew_a=-0.002199890772421539) Row(count_=1000, avg_a=44.170999999999964, median_a=44.0, range_a=5.0, kurt_a=-1.2621090514357718, skew_a=0.028105850940342677) Row(count_=1000, avg_a=54.27799999999998, median_a=54.0, range_a=5.0, kurt_a=-1.1765353785822203, skew_a=0.028073249474787697) Row(count_=1000, avg_a=64.36300000000004, median_a=64.5, range_a=5.5, kurt_a=-1.1937063922102475, skew_a=0.022677868327259154) Row(count_=1000, avg_a=74.69400000000003, median_a=75.0, range_a=5.0, kurt_a=-1.1575622078624397, skew_a=0.011320714782724487) Row(count_=1000, avg_a=84.91999999999997, median_a=85.0, range_a=5.0, kurt_a=-1.1527905396389988, skew_a=0.03895880064672291) Row(count_=1000, avg_a=94.80699999999983, median_a=94.5, range_a=4.5, kurt_a=-1.1692517740147628, skew_a=-0.07904777702222689) -------- Row(count_=1009, avg_a=4.36570862239841, median_a=4.5, range_a=4.5, kurt_a=-1.2968951836519373, skew_a=0.07325589625519861) Row(count_=1030, avg_a=14.433980582524276, median_a=14.5, range_a=4.5, kurt_a=-1.1654893745362416, skew_a=0.06161254920508278) Row(count_=990, avg_a=24.477777777777778, median_a=24.5, range_a=4.5, kurt_a=-1.2407295816942823, skew_a=0.02204299115734132) Row(count_=992, avg_a=34.50000000000004, median_a=34.5, range_a=4.5, kurt_a=-1.261633362222406, skew_a=-0.0038751056447093443) Row(count_=990, avg_a=44.33434343434345, median_a=44.5, range_a=4.5, kurt_a=-1.2898246583479316, skew_a=0.026731188551893034) Row(count_=1008, avg_a=54.424603174603185, median_a=54.5, range_a=4.5, kurt_a=-1.2113880444515432, skew_a=0.025005384741136966) Row(count_=1084, avg_a=64.9926199261992, median_a=65.0, range_a=5.0, kurt_a=-1.2445096613484907, skew_a=0.013301745096209827) Row(count_=963, avg_a=75.5597092419521, median_a=75.5, range_a=4.5, kurt_a=-1.1958331268371774, skew_a=-0.0036949223413463026) Row(count_=982, avg_a=85.49898167006121, median_a=85.5, range_a=4.5, kurt_a=-1.2316511547563596, skew_a=0.028323605109659384) Row(count_=952, avg_a=95.04936974789908, median_a=95.0, range_a=4.0, kurt_a=-1.2147434246113913, skew_a=-0.046865868122189916) For 10000 values Create Values 0.125 Temp Table 0.0780000686646 Direct Select 42.0789999962 If you use floating point randoms between 0 and 100 (unlikley to be the same) your results are the same for the two methods. This equates to a unique constraint on the value a. Row(count_=100, avg_a=5.748706253517386, median_a=5.649503890773561, range_a=5.412757441037625, kurt_a=-1.1746133648719341, skew_a=-0.009613272016081358) Row(count_=100, avg_a=15.719252401018002, median_a=15.693584010477284, range_a=4.55963511492537, kurt_a=-1.263197835108484, skew_a=0.008040885762458427) Row(count_=100, avg_a=24.92434955218562, median_a=24.93885721975282, range_a=4.554414485957114, kurt_a=-1.3539945827984883, skew_a=0.003266018102726588) Row(count_=100, avg_a=34.099423459789975, median_a=34.563288489048965, range_a=5.018421574118731, kurt_a=-1.0587408119696673, skew_a=0.28143823756493713) Row(count_=100, avg_a=44.47208030902492, median_a=44.58815199289917, range_a=4.874941147886144, kurt_a=-1.2543233951126398, skew_a=0.2327553409751225) Row(count_=100, avg_a=55.3138398166566, median_a=54.93423317144963, range_a=5.415960481027874, kurt_a=-1.2708486071713418, skew_a=-0.14043083347876112) Row(count_=100, avg_a=65.6097929237884, median_a=65.4064175618783, range_a=4.948439437815516, kurt_a=-0.931844893881439, skew_a=-0.011890670113570125) Row(count_=100, avg_a=75.18219078190553, median_a=75.27180623430755, range_a=4.903194661190348, kurt_a=-0.9791029687782818, skew_a=0.16344862038404828) Row(count_=100, avg_a=84.50857414007987, median_a=85.12985537323614, range_a=4.87232053818542, kurt_a=-0.9942896749129843, skew_a=0.3138662037084436) Row(count_=100, avg_a=94.87824675404805, median_a=95.00796331571603, range_a=4.856222578935515, kurt_a=-0.8831448690404673, skew_a=0.06626779494219992) -------- Row(count_=100, avg_a=5.748706253517389, median_a=5.649503890773561, range_a=5.412757441037625, kurt_a=-1.1746133648718897, skew_a=-0.009613272016084752) Row(count_=100, avg_a=15.719252401018005, median_a=15.693584010477284, range_a=4.55963511492537, kurt_a=-1.2631978351200217, skew_a=0.00804088576309135) Row(count_=100, avg_a=24.92434955218562, median_a=24.93885721975282, range_a=4.554414485957114, kurt_a=-1.353994582778569, skew_a=0.0032660181014346847) Row(count_=100, avg_a=34.09942345978997, median_a=34.563288489048965, range_a=5.018421574118731, kurt_a=-1.058740812005628, skew_a=0.281438237564926) Row(count_=100, avg_a=44.47208030902493, median_a=44.58815199289917, range_a=4.874941147886144, kurt_a=-1.2543233950859998, skew_a=0.23275534097938066) Row(count_=100, avg_a=55.31383981665663, median_a=54.93423317144963, range_a=5.415960481027874, kurt_a=-1.2708486071562324, skew_a=-0.1404308334708752) Row(count_=100, avg_a=65.60979292378843, median_a=65.4064175618783, range_a=4.948439437815516, kurt_a=-0.931844892154237, skew_a=-0.01189067013875273) Row(count_=100, avg_a=75.18219078190549, median_a=75.27180623430755, range_a=4.903194661190348, kurt_a=-0.9791029673646238, skew_a=0.1634486203586964) Row(count_=100, avg_a=84.50857414007993, median_a=85.12985537323614, range_a=4.87232053818542, kurt_a=-0.9942896749150102, skew_a=0.3138662037597631) Row(count_=100, avg_a=94.87824675404813, median_a=95.00796331571603, range_a=4.856222578935515, kurt_a=-0.8831448789962583, skew_a=0.06626779504622561) For 1000 values Create Values 0.0160000324249 Temp Table 0.0 Direct Select 0.593999862671 Row(count_=1000, avg_a=5.1465713581452555, median_a=5.184817865526393, range_a=5.179990253113875, kurt_a=-1.2276078213726045, skew_a=-0.013509633447731376) Row(count_=1000, avg_a=15.477083831215271, median_a=15.496762271535907, range_a=5.116511640223681, kurt_a=-1.116214886034431, skew_a=0.014834611510481743) Row(count_=1000, avg_a=25.319340295160796, median_a=25.43882990188225, range_a=4.824704873278025, kurt_a=-1.2338857842121025, skew_a=0.030005308088103796) Row(count_=1000, avg_a=35.2228257263221, median_a=35.16963687237869, range_a=4.899809344466261, kurt_a=-1.192955688791452, skew_a=-0.02590364326826991) Row(count_=1000, avg_a=45.276240889245805, median_a=45.19651051476565, range_a=5.125692599039066, kurt_a=-1.2069413096576327, skew_a=-0.006771535776911118) Row(count_=1000, avg_a=55.26487312071604, median_a=55.27079693639841, range_a=4.936034142614691, kurt_a=-1.1637489003082986, skew_a=-0.02359354858831377) Row(count_=1000, avg_a=65.16342617092309, median_a=65.0731696358693, range_a=4.85257770137315, kurt_a=-1.1535421878609395, skew_a=-0.05481770150809203) Row(count_=1000, avg_a=75.22079115403587, median_a=75.05605132607052, range_a=5.129219516954279, kurt_a=-1.1928080062114332, skew_a=-0.11017049933950125) Row(count_=1000, avg_a=85.08982592318694, median_a=85.03079660153368, range_a=4.845310277204703, kurt_a=-1.1605147433307423, skew_a=0.006264076988118132) Row(count_=1000, avg_a=94.84622180234878, median_a=94.93777960062039, range_a=5.058983484628392, kurt_a=-1.1365822005394108, skew_a=0.09433749833452731) -------- Row(count_=1000, avg_a=5.146571358145253, median_a=5.184817865526393, range_a=5.179990253113875, kurt_a=-1.2276078213725388, skew_a=-0.013509633447758265) Row(count_=1000, avg_a=15.477083831215293, median_a=15.496762271535907, range_a=5.116511640223681, kurt_a=-1.116214886032956, skew_a=0.014834611511003215) Row(count_=1000, avg_a=25.3193402951608, median_a=25.43882990188225, range_a=4.824704873278025, kurt_a=-1.2338857841920354, skew_a=0.03000530808686081) Row(count_=1000, avg_a=35.222825726322036, median_a=35.16963687237869, range_a=4.899809344466261, kurt_a=-1.19295568839722, skew_a=-0.025903643288459458) Row(count_=1000, avg_a=45.27624088924583, median_a=45.19651051476565, range_a=5.125692599039066, kurt_a=-1.2069413097957296, skew_a=-0.006771535764919865) Row(count_=1000, avg_a=55.26487312071602, median_a=55.27079693639841, range_a=4.936034142614691, kurt_a=-1.163748900249751, skew_a=-0.023593548599805832) Row(count_=1000, avg_a=65.16342617092316, median_a=65.0731696358693, range_a=4.85257770137315, kurt_a=-1.1535421837748807, skew_a=-0.05481770158063221) Row(count_=1000, avg_a=75.22079115403582, median_a=75.05605132607052, range_a=5.129219516954279, kurt_a=-1.1928079995789285, skew_a=-0.11017049944591531) Row(count_=1000, avg_a=85.08982592318682, median_a=85.03079660153368, range_a=4.845310277204703, kurt_a=-1.16051473436529, skew_a=0.006264076855812619) Row(count_=1000, avg_a=94.84622180234877, median_a=94.93777960062039, range_a=5.058983484628392, kurt_a=-1.1365821843686328, skew_a=0.09433749811719974) For 10000 values Create Values 0.171999931335 Temp Table 0.0940001010895 Direct Select 51.2660000324 A unique index on a speeds things up quite a bit: Row(count_=1000, avg_a=5.291284584219622, median_a=5.224169743431317, range_a=5.204884398565512, kurt_a=-1.2053491612307186, skew_a=-0.06412961915003139) Row(count_=1000, avg_a=15.19960706219981, median_a=15.258680066627072, range_a=4.828785540278402, kurt_a=-1.1911058694354817, skew_a=0.02172873337115814) Row(count_=1000, avg_a=25.379367514831557, median_a=25.23120484027688, range_a=5.129646711684137, kurt_a=-1.2205358474609407, skew_a=-0.10520925819639537) Row(count_=1000, avg_a=35.232784327212876, median_a=35.27068212562956, range_a=4.897347967780343, kurt_a=-1.2511839407074996, skew_a=0.02777253700475593) Row(count_=1000, avg_a=45.25627699519564, median_a=45.25291206568618, range_a=5.074668715797891, kurt_a=-1.1717152124275125, skew_a=0.005573021978287459) Row(count_=1000, avg_a=55.335118379673474, median_a=55.34391141689564, range_a=5.0157589008802965, kurt_a=-1.2160223340828873, skew_a=-0.019172469125908895) Row(count_=1000, avg_a=65.56019159339326, median_a=65.44314456692297, range_a=5.070373293357882, kurt_a=-1.1278868688217012, skew_a=-0.059575523737229547) Row(count_=1000, avg_a=75.47890939134653, median_a=75.38768879622768, range_a=4.863739620288946, kurt_a=-1.2082910998919425, skew_a=-0.027338707469408953) Row(count_=1000, avg_a=84.92926963544527, median_a=85.05409603311779, range_a=4.796697574458776, kurt_a=-1.218065301763463, skew_a=0.0457076356747131) Row(count_=1000, avg_a=94.76523595655303, median_a=94.93062523363062, range_a=5.064303290298284, kurt_a=-1.161171335243679, skew_a=0.04271147510153828) -------- Row(count_=1000, avg_a=5.291284584219632, median_a=5.224169743431317, range_a=5.204884398565512, kurt_a=-1.2053491612307055, skew_a=-0.06412961915002825) Row(count_=1000, avg_a=15.199607062199814, median_a=15.258680066627072, range_a=4.828785540278402, kurt_a=-1.1911058694392072, skew_a=0.0217287333718333) Row(count_=1000, avg_a=25.37936751483154, median_a=25.23120484027688, range_a=5.129646711684137, kurt_a=-1.2205358474341614, skew_a=-0.10520925819810698) Row(count_=1000, avg_a=35.23278432721286, median_a=35.27068212562956, range_a=4.897347967780343, kurt_a=-1.2511839408600005, skew_a=0.027772537009706603) Row(count_=1000, avg_a=45.25627699519566, median_a=45.25291206568618, range_a=5.074668715797891, kurt_a=-1.1717152125360895, skew_a=0.005573021987383835) Row(count_=1000, avg_a=55.3351183796735, median_a=55.34391141689564, range_a=5.0157589008802965, kurt_a=-1.2160223337933451, skew_a=-0.019172469121147794) Row(count_=1000, avg_a=65.56019159339328, median_a=65.44314456692297, range_a=5.070373293357882, kurt_a=-1.1278868716167605, skew_a=-0.059575523710255075) Row(count_=1000, avg_a=75.47890939134649, median_a=75.38768879622768, range_a=4.863739620288946, kurt_a=-1.208291094127802, skew_a=-0.027338707557266136) Row(count_=1000, avg_a=84.92926963544532, median_a=85.05409603311779, range_a=4.796697574458776, kurt_a=-1.218065302852724, skew_a=0.045707635738103734) Row(count_=1000, avg_a=94.76523595655297, median_a=94.93062523363062, range_a=5.064303290298284, kurt_a=-1.1611713333416376, skew_a=0.04271147504423989) For 10000 values Create Values 0.171999931335 Temp Table 0.0629999637604 Direct Select 25.8129999638 The temp table with even 1 million values is still pretty quick (these are ints with no index) Row(count_=100000, avg_a=4.493870000000015, median_a=4.5, range_a=4.5, kurt_a=-1.2220637501418172, skew_a=-0.001574985987403867) Row(count_=100000, avg_a=14.511620000000136, median_a=14.5, range_a=5.5, kurt_a=-1.216483063530485, skew_a=0.0016051623831945957) Row(count_=100000, avg_a=24.52255999999982, median_a=25.0, range_a=5.0, kurt_a=-1.2176495314446354, skew_a=0.00462555887725628) Row(count_=100000, avg_a=34.52627999999973, median_a=35.0, range_a=5.0, kurt_a=-1.2264948070116772, skew_a=-0.0032866643107762328) Row(count_=100000, avg_a=44.52893000000028, median_a=45.0, range_a=5.0, kurt_a=-1.2086115586426338, skew_a=-0.000191082937635113) Row(count_=100000, avg_a=54.51072000000024, median_a=55.0, range_a=5.0, kurt_a=-1.2237607773475694, skew_a=0.0011560871219098848) Row(count_=100000, avg_a=64.48885999999983, median_a=64.5, range_a=4.5, kurt_a=-1.2252413806054188, skew_a=-0.000483154638792341) Row(count_=100000, avg_a=74.4663800000003, median_a=74.0, range_a=5.0, kurt_a=-1.2185013767429773, skew_a=-0.0005112597607989715) Row(count_=100000, avg_a=84.45591999999942, median_a=84.0, range_a=5.0, kurt_a=-1.212945093586538, skew_a=-2.30809369187508e-05) Row(count_=100000, avg_a=94.50174000000081, median_a=94.0, range_a=5.0, kurt_a=-1.2288439835751905, skew_a=-0.010769765167932835) For 1000000 values Create Values 13.0629999638 Temp Table 10.9850001335 --- () ascii ribbon campaign against html e-mail /\ www.asciiribbon.org _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users