Vamos supor que voce tenha a seguinte tabela:E voce tenha que ordena-la de acordo com os seguintes criterios: a maior media por departamento, seguido de maior nota a, maior nota b e finalmente maior nota c. Fica bem simples se usarmos a clausula order by:SELECT department, name, grade_a, grade_b, grade_cFROM candidatesORDER BY department, ((grade_a + grade_b + grade_c) / 3) DESC,grade_a DESC, grade_b DESC, grade_c DESCResultado:Mas agora queremos criar uma qualificacao indicando a posicao do candidato de acordo com os criterios acima e esta posicao deve ser relativa ao departamento que ele pertence, ou seja queremos saber os tre melhores qualificados no departamento "Development" e os tres melhores no departamento "Marketing". Talvez muitos ja estejam pensando em usar sua linguagem de programacao favorita para resolver este problema mas no Postgres temos as Window Functions:SELECT department, name, grade_a, grade_b, grade_c,rank() OVER(PARTITION BY department ORDER BY ((grade_a + grade_b + grade_c) / 3) DESC, grade_a DESC, grade_b DESC, grade_c DESC)FROM candidatesResultado:Legal, agora temos um numero indicando a posicao de cada candidato relativo ao seu departamento. Mas digamos agora que apenas os dois melhores candidatos de cada departamento devem ser retornados. Neste caso a seguinte query deve ser satisfatoria:SELECT *FROM(SELECT department, name, grade_a, grade_b, grade_c,rank() OVER(PARTITION BY department ORDER BY ((grade_a + grade_b + grade_c) / 3) DESC, grade_a DESC, grade_b DESC, grade_c DESC)FROM candidates) AS sub_queryWHERE rank < 3Resultado:Espero que estes exemplos possam te ajudar a entender como as Window Functions funcionam e como elas podem te ajudar.Referencia:http://postgresguide.com/tips/window.html Ola a todos.Acabei de criar um repositorio no github com o codigo fonte de um pequeno jogo que criei usando Action Script 3 e a biblioteca flixel. O nome do jogo e DarkMatters.O jogo e bem simples e criei com a intencao de aprender mais sobre o processo de desenvolvimento de um jogo. Infelizmente o codigo nao e de grande qualidade mas espero que possa ajudar alguem interessado no assunto. Inserindo a partir de uma consulta SQLSupondo que temos a seguinte estrutura de tabelas:CREATE TABLE users(id int not null,name text not null,email text);CREATE TABLE user_searches_results(id int not null,id_user int not null,search_date date);Agora como nos podemos guardar todos os id's da tabela users na tabela user_searches_results retornados na seguinte consulta: SELECT id FROM users WHERE name LIKE 'Maria%' ?Este seguinte comando sql e capaz de fazer a tarefa de forma muito eficiente:INSERT INTO user_searches_results(id, id_user, search_date)SELECT 1, id, now() FROM users WHERE name LIKE 'Maria%';Simples nao?Retornando um registro aleatorio a partir de uma consultaMySQLSELECT column1, column2, ... FROM table ORDER BY rand() LIMIT 1PostgreSQLSELECT column1, column2, ... FROM table ORDER BY random() LIMIT 1SQL ServerSELECT TOP 1 column1, column2, ... FROM tableORDER BY NEWID()DB2SELECT column1, column2, RAND() as IDX FROM table ORDER BY IDX FETCH FIRST 1 ROWS ONLYOracleSELECT column1 FROM( SELECT column1 FROM tableORDER BY dbms_random.value )WHERE rownum = 1Selecionar o segundo maior(ou menor valor) de uma colunaSELECT MAX(column) FROM table WHERE column < (SELECT MAX(column) FROM table )Use MIN se voce quiser o segundo menor valor e nao se esqueca do operador >.Copiar a estrutura de uma tabela sem copiar os dados(MySQL, PostgresSQL)CREATE TABLE users_2