distinct_over_window_struct.sql 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. /* syntax version 1 */
  2. /* postgres can not */
  3. USE plato;
  4. PRAGMA DistinctOverWindow;
  5. $input = AsList(
  6. AsStruct(1 AS key, 1 AS subkey, AsStruct(1 AS i1, 2 AS i2, 3 AS i3) AS col),
  7. AsStruct(2 AS key, 1 AS subkey, AsStruct(1 AS i1, 2 AS i2, 3 AS i3) AS col),
  8. AsStruct(3 AS key, 1 AS subkey, AsStruct(1 AS i1, 2 AS i2, 3 AS i3) AS col),
  9. AsStruct(4 AS key, 2 AS subkey, AsStruct(3 AS i1, 4 AS i2, 5 AS i3) AS col),
  10. AsStruct(5 AS key, 2 AS subkey, AsStruct(3 AS i1, 4 AS i2, 5 AS i3) AS col),
  11. AsStruct(6 AS key, 2 AS subkey, AsStruct(5 AS i1, 5 AS i2, 5 AS i3) AS col),
  12. AsStruct(7 AS key, 3 AS subkey, AsStruct(5 AS i1, 6 AS i2, 7 AS i3) AS col),
  13. AsStruct(8 AS key, 3 AS subkey, AsStruct(6 AS i1, 7 AS i2, 8 AS i3) AS col),
  14. AsStruct(9 AS key, 3 AS subkey, AsStruct(7 AS i1, 8 AS i2, 9 AS i3) AS col),
  15. );
  16. SELECT
  17. key,
  18. subkey,
  19. col,
  20. -- assuming ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
  21. count(DISTINCT col) OVER (PARTITION BY subkey ORDER BY key ASC) AS cnt1_asc,
  22. count(DISTINCT col) OVER (PARTITION BY subkey ORDER BY key DESC) AS cnt2_desc,
  23. FROM AS_TABLE($input)
  24. ORDER BY key;
  25. SELECT
  26. key,
  27. subkey,
  28. col,
  29. -- assuming ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
  30. count(DISTINCT col) OVER (PARTITION BY subkey) AS cnt,
  31. FROM AS_TABLE($input)
  32. ORDER BY key;