Advertisement
Guest User

Untitled

a guest
Mar 30th, 2017
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.93 KB | None | 0 0
  1. -- Bad use of aggregation
  2. SELECT
  3. users.id,
  4. users.email,
  5. users.name,
  6. MAX(users.created_at) AS created_at, -- not necessary
  7. COUNT(orders.id) AS orders_count
  8. FROM orders
  9. LEFT JOIN users
  10. ON users.id = orders.user_id
  11. GROUP BY users.id, users.email, users.name -- only users.id should be in here
  12.  
  13. -- Good but using sub-query
  14. SELECT
  15. users.id,
  16. users.email,
  17. users.name,
  18. users.created_at,
  19. user_orders.orders_count
  20. FROM ( -- subqueries are hard to read
  21. SELECT
  22. orders.user_id,
  23. COUNT(orders.id) AS orders_count
  24. FROM orders
  25. GROUP BY orders.user_id
  26. ) user_orders
  27. LEFT JOIN users
  28. ON users.id = user_orders.user_id
  29.  
  30. -- Better
  31. WITH user_orders AS (
  32. SELECT
  33. orders.user_id,
  34. COUNT(orders.id) AS orders_count
  35. FROM orders
  36. GROUP BY orders.user_id
  37. )
  38. SELECT
  39. users.id,
  40. users.email,
  41. users.name,
  42. users.created_at,
  43. user_orders.orders_count
  44. FROM user_orders
  45. LEFT JOIN users
  46. ON users.id = user_orders.user_id
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement