SELECT TOP 50 query_stats.query_hash AS 'Query Hash',
SUM(query_stats.total_worker_time) / SUM(query_stats.execution_count) AS 'Avg CPU Time',
SUM(query_stats.total_logical_reads) / SUM(query_stats.execution_count) AS 'Avg logical Read',
SUM(query_stats.total_worker_time) / SUM(query_stats.execution_count) AS 'Avg Worker time',
MIN(query_stats.statement_text) AS 'Statement Text',
MIN(DB_NAME(query_stats.dbid)) AS 'DB_Name'
FROM
(SELECT QS.*,
ST.dbid,
SUBSTRING(ST.text, (QS.statement_start_offset/2) + 1, ((CASE statement_end_offset WHEN -1 THEN DATALENGTH(ST.text) ELSE QS.statement_end_offset END - QS.statement_start_offset)/2) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS QS
CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) as ST) as query_stats
GROUP BY query_stats.query_hash
ORDER BY 2 DESC;