select  contest_id, Round ( count ( * )  *  100 / ( select  count ( * )  from  Users) , 2 )  as  percentage from  Users cross  join  Registerusing ( user_id) group  by  contest_idorder  by  count ( * )  desc , contest_id
select  query_name ,  Round ( avg ( rating/ position) , 2 )  as  quality, 
Round ( sum ( IF ( rating< 3 , 1 , 0 ) ) * 100 / count ( * ) , 2 )  as  poor_query_percentage
from  Queries 
group  by  query_name
class  Solution  { public  int  rob ( int [ ]  nums)  { int  n =  nums. length; int  dp[ ]  =  new  int [ n] ; dp[ 0 ]  =  nums[ 0 ] ; if ( n>= 2 ) dp[ 1 ]  =  Math . max ( nums[ 0 ] , nums[ 1 ] ) ; for ( int  i= 2 ; i< n; i++ ) { dp[ i]  =  Math . max ( dp[ i- 1 ] , dp[ i- 2 ] + nums[ i] ) ; } return  dp[ n- 1 ] ; } 
} 
class  Solution  { public  static  int  deleteAndEarn ( int [ ]  nums)  { Map < Integer , Integer > =  new  TreeMap < > ( ) ; for ( int  num: nums) mp. put ( num, mp. getOrDefault ( num, 0 ) + num) ; int  n =  mp. size ( ) ; int  dp[ ] [ ]  =  new  int [ n] [ 2 ] ; int  i =  0 ; for ( Map. Entry < Integer , Integer > : mp. entrySet ( ) ) { dp[ i] [ 0 ]  =  entry. getKey ( ) ; dp[ i] [ 1 ]  =  entry. getValue ( ) ; i++ ; } for ( int  j= 1 ; j< n; j++ ) { if ( dp[ j] [ 0 ] - dp[ j- 1 ] [ 0 ] > 1 ) dp[ j] [ 1 ]  +=  dp[ j- 1 ] [ 1 ] ; else  { dp[ j] [ 1 ]  =  Math . max ( ( j- 2 >= 0 ? dp[ j- 2 ] [ 1 ] : 0 ) + dp[ j] [ 1 ] , dp[ j- 1 ] [ 1 ] ) ; } } return  dp[ n- 1 ] [ 1 ] ; } 
} 
class  Solution  { public  int  uniquePaths ( int  m,  int  n)  { int  dp[ ] [ ]  =  new  int [ m] [ n] ; for ( int  i= 0 ; i< m; i++ ) dp[ i] [ 0 ]  =  1 ; for ( int  i= 0 ; i< n; i++ ) dp[ 0 ] [ i]  =  1 ; for ( int  i= 1 ; i< m; i++ ) { for ( int  j= 1 ; j< n; j++ ) dp[ i] [ j]  =  dp[ i- 1 ] [ j]  +  dp[ i] [ j- 1 ] ; } return  dp[ m- 1 ] [ n- 1 ] ; } 
} 
class  Solution  { public  int  minPathSum ( int [ ] [ ]  grid)  { int  n =  grid. length; int  m =  grid[ 0 ] . length; for ( int  i= 1 ; i< n; i++ ) grid[ i] [ 0 ]  +=  grid[ i- 1 ] [ 0 ] ; for ( int  j= 1 ; j< m; j++ ) grid[ 0 ] [ j]  +=  grid[ 0 ] [ j- 1 ] ; for ( int  i= 1 ; i< n; i++ ) { for ( int  j= 1 ; j< m; j++ ) grid[ i] [ j]  +=  Math . min ( grid[ i- 1 ] [ j] , grid[ i] [ j- 1 ] ) ; } return  grid[ n- 1 ] [ m- 1 ] ; } 
} 
class  Solution  { public  int  uniquePathsWithObstacles ( int [ ] [ ]  obstacleGrid)  { int  n =  obstacleGrid. length; int  m =  obstacleGrid[ 0 ] . length; int  dp[ ] [ ]  =  new  int [ n] [ m] ; for ( int  i= 0 ; i< n; i++ ) { if ( obstacleGrid[ i] [ 0 ] == 1 ) break ; dp[ i] [ 0 ]  =  1 ; } for ( int  j= 0 ; j< m; j++ ) { if ( obstacleGrid[ 0 ] [ j] == 1 ) break ; dp[ 0 ] [ j]  =  1 ; } for ( int  i= 1 ; i< n; i++ ) { for ( int  j= 1 ; j< m; j++ ) { if ( obstacleGrid[ i] [ j] == 1 ) continue ; dp[ i] [ j]  =  dp[ i- 1 ] [ j] + dp[ i] [ j- 1 ] ; } } return  dp[ n- 1 ] [ m- 1 ] ; } 
}