AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 299113
Accepted
User1974
User1974
Asked: 2021-09-06 23:23:51 +0800 CST2021-09-06 23:23:51 +0800 CST 2021-09-06 23:23:51 +0800 CST

Truque de Caso Zero/NULO

  • 772

No livro Getting Started with SQL , Thomas Nield fala sobre uma técnica que ele chama de truque de caso zero/nulo :

Existe uma ferramenta simples, mas poderosa, que pode aplicar diferentes condições de filtragem a diferentes agregações. Podemos criar contagens totais separadas quando um tornado estava presente versus não presente em duas colunas separadas:

SELECT year, month,
SUM(CASE WHEN tornado = 1 THEN precipitation ELSE 0 END) as tornado_precipitation,
SUM(CASE WHEN tornado = 0 THEN precipitation ELSE 0 END) as non_tornado_precipitation
FROM station_data
WHERE year >= 1990
GROUP BY year, month

O que fizemos efetivamente foi nos livrar das condições WHERE quando tornado = 1 ou tornado = 0 e, em seguida, mover essas condições para expressões CASE dentro das funções SUM(). Se a condição for atendida, o valor da precipitação é adicionado à soma. Caso contrário, um 0 é adicionado, sem efeito. Fazemos isso para ambas as colunas, uma para quando um tornado estava presente e outra para quando um tornado não estava presente, respectivamente.

Você pode fazer com que a expressão CASE tenha quantos pares de condição/valor forem necessários, dando a você a capacidade de fazer interceptações de valores altamente particulares com suas agregações. Você também pode usar esse truque para emular crosstabs e tabelas dinâmicas, expressando agregações em colunas separadas em vez de linhas. Um exemplo comum disso é fazer a análise do ano atual/ano anterior, pois você pode expressar anos separados com colunas diferentes.


Como iniciante, essa técnica parece ser muito útil para resumir dados. Quero pesquisar essa técnica on-line para encontrar outras técnicas semelhantes em livros ou outros recursos.

O autor desse livro chama a técnica de "truque de caso zero/nulo". Mas quando eu google esse termo, não recebo muitos resultados.

Pergunta:

Existe um nome geralmente aceito para essa técnica? (que traria mais resultados ao pesquisar online)

oracle case
  • 2 2 respostas
  • 264 Views

2 respostas

  • Voted
  1. Best Answer
    Paul White
    2021-09-06T23:58:46+08:002021-09-06T23:58:46+08:00

    É variadamente conhecido como:

    • soma condicional
    • agregação filtrada
    • agregação condicional
    • agregação seletiva

    Pode ser escrito explicitamente usando CASEou usando equivalentemente FILTERa sintaxe introduzida com SQL:2003, por exemplo COUNT(*) FILTER (WHERE tornado = 1). Atualmente Postgres, HSQLDB e SQLite suportam a nova sintaxe.

    • 4
  2. AndreKR
    2021-09-07T13:05:59+08:002021-09-07T13:05:59+08:00

    O Excel (e possivelmente outro software de planilha) chama isso de " tabela dinâmica " porque você pega os grupos baseados em linhas e os gira essencialmente em 90 graus quando os coloca em colunas.

    Como as pessoas estão familiarizadas com o termo, ele foi transferido para o mundo SQL. Exemplo

    Observe que não é necessariamente a melhor maneira de fazer isso, pode haver outras técnicas, como agregação condicional ( FILTER) e funções de janela disponíveis. (Mas eu não sei nada sobre Oracle.)

    • 1

relate perguntas

  • Backups de banco de dados no Oracle - Exportar o banco de dados ou usar outras ferramentas?

  • ORDER BY usando prioridades personalizadas para colunas de texto

  • Interface sqlplus confortável? [fechado]

  • Como encontrar as instruções SQL mais recentes no banco de dados?

  • Como posso consultar nomes usando expressões regulares?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve