add column to single row resultset

Advertisements

I have a query that gets me statistics about data in a table:

SELECT COUNT(1)                                                            batch_count,
       ROUND(MAX(batch_duration_milliseconds) / 1000)                      max_batch_duration_seconds,
       ROUND(AVG(batch_duration_milliseconds) / 1000)                      avg_batch_duration_seconds,
       ROUND(MIN(batch_duration_milliseconds) / 1000, 1)                   min_batch_duration_seconds,
       ROUND(SUM(total_queries_duration_milliseconds) / SUM(batch_duration_milliseconds) *
             100)                                                          query_duration_percentage,
       SUM(total_queries)                                                  queries,
       ROUND(SUM(monitoring_queries) / SUM(total_queries) * 100)           percent_monitoring_queries,
       ROUND(SUM(total_queries) / SUM(batch_duration_milliseconds) * 1000) queries_per_second,
       MAX(max_query_duration_milliseconds)                                max_query_duration,
       ROUND(AVG(avg_query_duration_milliseconds))                         avg_query_duration,

       ROUND(SUM(retrieved_data_bytes) / 1024 / 1024)                      data_mb,
       ROUND(MAX(retrieved_data_bytes) / 1024 / 1024)                      max_batch_data_mb,
       ROUND(ROUND(AVG(retrieved_data_bytes)) / 1024 / 1024)               avg_batch_data_mb,
       ROUND(SUM(retrieved_data_bytes_calculation_duration_milliseconds) / SUM(batch_duration_milliseconds) *
             100, 1)                                                       percent_data_calc_duration
FROM entrypoint_sql_queries
WHERE created_at > SUBDATE(NOW(), INTERVAL 1 HOUR);

now I want to add one more column that gets me the percent of queries caused by the entrypoint with the most queries:

  SELECT ROUND(MAX(total_queries) / SUM(total_queries) * 100) percent_most_expensive_job_queries
FROM (
         SELECT SUM(total_queries) AS total_queries
         FROM entrypoint_sql_queries
         WHERE created_at > SUBDATE(NOW(), INTERVAL 1 HOUR)
         GROUP BY entrypoint
     ) as t;

How can I get both into the same resultset (i.e. I want to show the resulting number of query 2 as an additional column in query 1)

>Solution :

You can do it by adding your second query as a single column on the global select :

SELECT COUNT(1)                                                            batch_count,
       ROUND(MAX(batch_duration_milliseconds) / 1000)                      max_batch_duration_seconds,
       ROUND(AVG(batch_duration_milliseconds) / 1000)                      avg_batch_duration_seconds,
       ROUND(MIN(batch_duration_milliseconds) / 1000, 1)                   min_batch_duration_seconds,
       ROUND(SUM(total_queries_duration_milliseconds) / SUM(batch_duration_milliseconds) *
             100)                                                          query_duration_percentage,
       SUM(total_queries)                                                  queries,
       ROUND(SUM(monitoring_queries) / SUM(total_queries) * 100)           percent_monitoring_queries,
       ROUND(SUM(total_queries) / SUM(batch_duration_milliseconds) * 1000) queries_per_second,
       MAX(max_query_duration_milliseconds)                                max_query_duration,
       ROUND(AVG(avg_query_duration_milliseconds))                         avg_query_duration,

       ROUND(SUM(retrieved_data_bytes) / 1024 / 1024)                      data_mb,
       ROUND(MAX(retrieved_data_bytes) / 1024 / 1024)                      max_batch_data_mb,
       ROUND(ROUND(AVG(retrieved_data_bytes)) / 1024 / 1024)               avg_batch_data_mb,
       ROUND(SUM(retrieved_data_bytes_calculation_duration_milliseconds) / SUM(batch_duration_milliseconds) *
             100, 1)                                                    percent_data_calc_duration,
       ( SELECT ROUND(MAX(total_queries) / SUM(total_queries) * 100) 
           FROM (
             SELECT SUM(total_queries) AS total_queries
             FROM entrypoint_sql_queries
             WHERE created_at > SUBDATE(NOW(), INTERVAL 1 HOUR)
             GROUP BY entrypoint
        ) as t ) as percent_most_expensive_job_queries
FROM entrypoint_sql_queries
WHERE created_at > SUBDATE(NOW(), INTERVAL 1 HOUR);

Leave a Reply Cancel reply