numerology.sql 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. --
  2. -- NUMEROLOGY
  3. -- Test various combinations of numeric types and functions.
  4. --
  5. --
  6. -- Test implicit type conversions
  7. -- This fails for Postgres v6.1 (and earlier?)
  8. -- so let's try explicit conversions for now - tgl 97/05/07
  9. --
  10. CREATE TABLE TEMP_FLOAT (f1 FLOAT8);
  11. INSERT INTO TEMP_FLOAT (f1)
  12. SELECT float8(f1) FROM INT4_TBL;
  13. INSERT INTO TEMP_FLOAT (f1)
  14. SELECT float8(f1) FROM INT2_TBL;
  15. SELECT f1 FROM TEMP_FLOAT
  16. ORDER BY f1;
  17. -- int4
  18. CREATE TABLE TEMP_INT4 (f1 INT4);
  19. INSERT INTO TEMP_INT4 (f1)
  20. SELECT int4(f1) FROM FLOAT8_TBL
  21. WHERE (f1 > -2147483647) AND (f1 < 2147483647);
  22. INSERT INTO TEMP_INT4 (f1)
  23. SELECT int4(f1) FROM INT2_TBL;
  24. SELECT f1 FROM TEMP_INT4
  25. ORDER BY f1;
  26. -- int2
  27. CREATE TABLE TEMP_INT2 (f1 INT2);
  28. INSERT INTO TEMP_INT2 (f1)
  29. SELECT int2(f1) FROM FLOAT8_TBL
  30. WHERE (f1 >= -32767) AND (f1 <= 32767);
  31. INSERT INTO TEMP_INT2 (f1)
  32. SELECT int2(f1) FROM INT4_TBL
  33. WHERE (f1 >= -32767) AND (f1 <= 32767);
  34. SELECT f1 FROM TEMP_INT2
  35. ORDER BY f1;
  36. --
  37. -- Group-by combinations
  38. --
  39. CREATE TABLE TEMP_GROUP (f1 INT4, f2 INT4, f3 FLOAT8);
  40. INSERT INTO TEMP_GROUP
  41. SELECT 1, (- i.f1), (- f.f1)
  42. FROM INT4_TBL i, FLOAT8_TBL f;
  43. INSERT INTO TEMP_GROUP
  44. SELECT 2, i.f1, f.f1
  45. FROM INT4_TBL i, FLOAT8_TBL f;
  46. SELECT DISTINCT f1 AS two FROM TEMP_GROUP ORDER BY 1;
  47. SELECT f1 AS two, max(f3) AS max_float, min(f3) as min_float
  48. FROM TEMP_GROUP
  49. GROUP BY f1
  50. ORDER BY two, max_float, min_float;
  51. -- GROUP BY a result column name is not legal per SQL92, but we accept it
  52. -- anyway (if the name is not the name of any column exposed by FROM).
  53. SELECT f1 AS two, max(f3) AS max_float, min(f3) AS min_float
  54. FROM TEMP_GROUP
  55. GROUP BY two
  56. ORDER BY two, max_float, min_float;
  57. SELECT f1 AS two, (max(f3) + 1) AS max_plus_1, (min(f3) - 1) AS min_minus_1
  58. FROM TEMP_GROUP
  59. GROUP BY f1
  60. ORDER BY two, min_minus_1;
  61. SELECT f1 AS two,
  62. max(f2) + min(f2) AS max_plus_min,
  63. min(f3) - 1 AS min_minus_1
  64. FROM TEMP_GROUP
  65. GROUP BY f1
  66. ORDER BY two, min_minus_1;
  67. DROP TABLE TEMP_INT2;
  68. DROP TABLE TEMP_INT4;
  69. DROP TABLE TEMP_FLOAT;
  70. DROP TABLE TEMP_GROUP;