Both MySQL and Snowflake share a high degree of ANSI SQL compliance, making your core analytical queries fully cross-compatible. Because both engines prioritize developer flexibility, they support aliasing in the HAVING and ORDER BY clauses, which keeps your code concise and prevents redundant calculations.

Essential SQL Best Practices

  • Strategic Aliasing: Use column aliases like total_daily_spend to simplify your logic. Both systems allow you to reference these names in the ORDER BY clause and the HAVING clause, saving you from repeating long SUM or COUNT functions.

  • Unaggregated Column Resolution: A common mistake is selecting a raw column (like a timestamp) during a GROUP BY. To fix this, wrap the column in MAX() or MIN(). This tells the database exactly which value to show for that group (e.g., the "most recent" delivery time).

  • Positional Referencing: For faster coding and cleaner scripts, you can use numeric positions (e.g., GROUP BY 1, 2) to refer to the columns in your SELECT list.

  • Time Zone Awareness: While CURRENT_DATE is standard, the result depends on your Session Time Zone. Always verify if your session matches your data’s time zone (usually UTC) to ensure you aren't missing late-night delivery logs.

  • Aggregate Filtering: Use the WHERE clause to filter raw data and the HAVING clause to filter aggregated results. Mastering this distinction is key to calculating "leakage" or overspend correctly.

  • Data Formatting: When handling geographic data, use LPAD on ZIP codes to ensure 5-digit consistency. This preserves leading zeros (e.g., "02108") that are otherwise lost when stored as integers.

  • Identifier Sensitivity: Keep in mind that Snowflake identifiers are generally case-insensitive unless wrapped in double quotes, whereas MySQL's sensitivity often depends on the host operating system.

Keep Reading

No posts found