minmax4.test 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. # 2012 February 02
  2. #
  3. # The author disclaims copyright to this source code. In place of
  4. # a legal notice, here is a blessing:
  5. #
  6. # May you do good and not evil.
  7. # May you find forgiveness for yourself and forgive others.
  8. # May you share freely, never taking more than you give.
  9. #
  10. #***********************************************************************
  11. #
  12. # Test for queries of the form:
  13. #
  14. # SELECT p, max(q) FROM t1;
  15. #
  16. # Demonstration that the value returned for p is on the same row as
  17. # the maximum q.
  18. #
  19. set testdir [file dirname $argv0]
  20. source $testdir/tester.tcl
  21. ifcapable !compound {
  22. finish_test
  23. return
  24. }
  25. do_test minmax4-1.1 {
  26. db eval {
  27. CREATE TABLE t1(p,q);
  28. SELECT p, max(q) FROM t1;
  29. }
  30. } {{} {}}
  31. do_test minmax4-1.2 {
  32. db eval {
  33. SELECT p, min(q) FROM t1;
  34. }
  35. } {{} {}}
  36. do_test minmax4-1.3 {
  37. db eval {
  38. INSERT INTO t1 VALUES(1,2);
  39. SELECT p, max(q) FROM t1;
  40. }
  41. } {1 2}
  42. do_test minmax4-1.4 {
  43. db eval {
  44. SELECT p, min(q) FROM t1;
  45. }
  46. } {1 2}
  47. do_test minmax4-1.5 {
  48. db eval {
  49. INSERT INTO t1 VALUES(3,4);
  50. SELECT p, max(q) FROM t1;
  51. }
  52. } {3 4}
  53. do_test minmax4-1.6 {
  54. db eval {
  55. SELECT p, min(q) FROM t1;
  56. }
  57. } {1 2}
  58. do_test minmax4-1.7 {
  59. db eval {
  60. INSERT INTO t1 VALUES(5,0);
  61. SELECT p, max(q) FROM t1;
  62. }
  63. } {3 4}
  64. do_test minmax4-1.8 {
  65. db eval {
  66. SELECT p, min(q) FROM t1;
  67. }
  68. } {5 0}
  69. do_test minmax4-1.9 {
  70. db eval {
  71. INSERT INTO t1 VALUES(6,1);
  72. SELECT p, max(q) FROM t1;
  73. }
  74. } {3 4}
  75. do_test minmax4-1.10 {
  76. db eval {
  77. SELECT p, min(q) FROM t1;
  78. }
  79. } {5 0}
  80. do_test minmax4-1.11 {
  81. db eval {
  82. INSERT INTO t1 VALUES(7,NULL);
  83. SELECT p, max(q) FROM t1;
  84. }
  85. } {3 4}
  86. do_test minmax4-1.12 {
  87. db eval {
  88. SELECT p, min(q) FROM t1;
  89. }
  90. } {5 0}
  91. do_test minmax4-1.13 {
  92. db eval {
  93. DELETE FROM t1 WHERE q IS NOT NULL;
  94. SELECT p, max(q) FROM t1;
  95. }
  96. } {7 {}}
  97. do_test minmax4-1.14 {
  98. db eval {
  99. SELECT p, min(q) FROM t1;
  100. }
  101. } {7 {}}
  102. do_test minmax4-2.1 {
  103. db eval {
  104. CREATE TABLE t2(a,b,c);
  105. INSERT INTO t2 VALUES
  106. (1,null,2),
  107. (1,2,3),
  108. (1,1,4),
  109. (2,3,5);
  110. SELECT a, max(b), c FROM t2 GROUP BY a ORDER BY a;
  111. }
  112. } {1 2 3 2 3 5}
  113. do_test minmax4-2.2 {
  114. db eval {
  115. SELECT a, min(b), c FROM t2 GROUP BY a ORDER BY a;
  116. }
  117. } {1 1 4 2 3 5}
  118. do_test minmax4-2.3 {
  119. db eval {
  120. SELECT a, min(b), avg(b), count(b), c FROM t2 GROUP BY a ORDER BY a DESC;
  121. }
  122. } {2 3 3.0 1 5 1 1 1.5 2 4}
  123. do_test minmax4-2.4 {
  124. db eval {
  125. SELECT a, min(b), max(b), c FROM t2 GROUP BY a ORDER BY a;
  126. }
  127. } {1 1 2 3 2 3 3 5}
  128. do_test minmax4-2.5 {
  129. db eval {
  130. SELECT a, max(b), min(b), c FROM t2 GROUP BY a ORDER BY a;
  131. }
  132. } {1 2 1 4 2 3 3 5}
  133. do_test minmax4-2.6 {
  134. db eval {
  135. SELECT a, max(b), b, max(c), c FROM t2 GROUP BY a ORDER BY a;
  136. }
  137. } {1 2 1 4 4 2 3 3 5 5}
  138. do_test minmax4-2.7 {
  139. db eval {
  140. SELECT a, min(b), b, min(c), c FROM t2 GROUP BY a ORDER BY a;
  141. }
  142. } {1 1 {} 2 2 2 3 3 5 5}
  143. finish_test