Dashboard Report - Trending Search Terms

AI-generated summary

The Dashboard Report - Trending Search Terms provides insights into search terms used on a site within a specified date range. The SQL query, shared by SaraDev, helps understand which terms are most frequently searched for and how often users click on the search results. The query uses parameters :start_date and :end_date to filter search logs, and groups results by lowercase search term. It calculates the term count, click-through rate, and click count for each term, and orders the results by term count in descending order.

This is an SQL version of the Dashboard Report for Trending Search Terms.

This report provides insight into the search terms used on a site within a specified date range, and helps understand which terms are most frequently searched for and how often users click on the search results.

--[params]
-- date :start_date
-- date :end_date

SELECT 
	lower(term) AS search_term,
	count(id) AS term_count,
	(COALESCE(SUM(CASE WHEN search_result_type IS NULL THEN 0 ELSE 1 END), 0) / count(id)::float) * 100 AS click_through_rate,
	SUM(CASE WHEN search_result_type IS NULL THEN 0 ELSE 1 END) as click_count
FROM search_logs sl
WHERE sl.created_at::date BETWEEN :start_date AND :end_date
GROUP BY lower(term)
ORDER BY term_count DESC

SQL Query Explanation

Here’s a breakdown of the query:

  • Parameters:
    • :start_date - The beginning of the date range for the report.
    • :end_date - The end of the date range for the report.
      • Both date parameters accept the format of YYYY-MM-DD.
  • Data Selection:
    • lower(term) AS search_term: Converts the search term to lowercase for consistent grouping and names the resulting column search_term.
    • count(id) AS term_count: Counts the total number of searches for each term and labels this column term_count.
    • (COALESCE(SUM(CASE WHEN search_result_type IS NULL THEN 0 ELSE 1 END), 0) / count(id)::float) * 100 AS click_through_rate: Calculates the click-through rate (CTR) for each term by determining the percentage of searches that resulted in a click. It handles cases where search_result_type is NULL (indicating no click) by assigning a zero, otherwise one. The result is then divided by the total count of searches for that term to get a rate, which is then multiplied by 100 to get a percentage.
    • SUM(CASE WHEN search_result_type IS NULL THEN 0 ELSE 1 END) as click_count: Sums the number of times search results were clicked for each term.
  • Filtering:
    • WHERE sl.created_at::date BETWEEN :start_date AND :end_date: Filters the search logs to only include entries where the created_at date falls between the specified start and end dates.
  • Grouping and Ordering:
    • GROUP BY lower(term): Groups the results by the lowercase search term to aggregate counts and clicks for each unique term.
    • ORDER BY term_count DESC: Orders the results by the term_count in descending order, showing the most frequently searched terms at the top.

Example Results

search_term term_count click_through_rate click_count
example search term 756 0 0
#category search term 545 0.3669724770642202 2
in:personal order:latest 70 0 0
test 59 5.084745762711865 3
search 57 14.03508771929824 8
… … … …
6 Likes