{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "SQL-modulo_5_aula.ipynb",
      "provenance": [],
      "collapsed_sections": [],
      "toc_visible": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "KJqp9AANOCtf"
      },
      "source": [
        "<img src=\"https://raw.githubusercontent.com/andre-marcos-perez/ebac-course-utils/main/media/logo/newebac_logo_black_half.png\" alt=\"ebac-logo\">\n",
        "\n",
        "---\n",
        "\n",
        "# **Módulo** | SQL: Agregações\n",
        "Caderno de **Aula**<br> \n",
        "Professor [Mariane Neiva](www.linkedin.com/in/mariane-neiva)\n",
        "\n",
        "---"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "d9jDtUbDOE1-"
      },
      "source": [
        "# **Tópicos**\n",
        "\n",
        "<ol type=\"1\">\n",
        "  <li>Função count e cláusula group by;</li>\n",
        "  <li>Funções min / max / sum / avg;</li>\n",
        "  <li>Cláusula having;</li>\n",
        "</ol>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "SmoHgt-lwkpD"
      },
      "source": [
        "---"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "GABI6OW8OfQ2"
      },
      "source": [
        "# **Aulas**"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "NF7Pdc6hJ8oF"
      },
      "source": [
        "Nessa aula, usaremos a seguinte tabela:"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "QkH5jQruJG-L"
      },
      "source": [
        "```sql\n",
        "CREATE TABLE transacoes (\n",
        "  id_cliente INT, \n",
        "  id_transacao INT,\n",
        "  data_compra DATE,\n",
        "  valor FLOAT, \n",
        "  id_loja varchar(25)\n",
        ");\n",
        "```"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "MLdOjQcDKCXc"
      },
      "source": [
        "Também temos os seguintes valores inseridos na tabela"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "I34tqzZrKOma"
      },
      "source": [
        "```sql\n",
        "INSERT INTO transacoes VALUES (1,768805383,'2021-06-10',50.74,'magalu');\n",
        "INSERT INTO transacoes VALUES (2,768805399,'2021-06-13',30.90,'giraffas');\n",
        "INSERT INTO transacoes VALUES (3,818770008,'2021-06-05',110.00,'postoshell');\n",
        "INSERT INTO transacoes VALUES (1,76856563,'2021-07-10',2000.90,'magalu');\n",
        "INSERT INTO transacoes VALUES (1,767573759,'2021-06-20',15.70,'subway');\n",
        "INSERT INTO transacoes VALUES (3,818575758,'2021-06-25',2.99,'seveneleven');\n",
        "INSERT INTO transacoes VALUES (4,764545534,'2021-07-11',50.74,'extra');\n",
        "INSERT INTO transacoes VALUES (5,76766789,'2021-08-02',10.00,'subway');\n",
        "INSERT INTO transacoes VALUES (3,8154567758,'2021-08-15',1100.00,'shopee');\n",
        "```"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "rRBLidUaK7NJ"
      },
      "source": [
        "Como resultado da função SELECT, temos a seguinte tabela:\n",
        "\n",
        "| id_cliente | id_transacao | data_compra |valor | id_loja |\n",
        "|------------|----------|----|-----| ------- |\n",
        "| 1| 768805383    | 2021-06-10    | 50.74 |magalu \n",
        "| 2 | 768805399    | 2021-06-13    |  30.90 | giraffas \n",
        "| 3 | 818770008    |2021-06-05   |  110.00 |  postoshell  \n",
        "|1 |76856563 | 2021-07-10 |2000.90 |magalu\n",
        "|1|767573759|2021-06-20|15.70|subway\n",
        "| 3|818575758|2021-06-25|2.99|seveneleven\n",
        " |4|764545534|2021-07-10|50.74|extra\n",
        "|5|76766789|2021-08-92|10.00|subway\n",
        "|3|8154567758|2021-08-15|1100.00|shopee "
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "ok889VghEyKq"
      },
      "source": [
        "#1. Função count e cláusula group by\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "eqtRcYZgF94g"
      },
      "source": [
        "## 1.1 **Função COUNT**\n",
        "\n",
        "A função **count** retorna a quantidade de linhas na tabela que corresponde a determinada seleção. \n",
        "\n",
        "```sql\n",
        "SELECT COUNT(<nome_coluna>)\n",
        "FROM <nome_tabela>\n",
        "WHERE <condicao>;\n",
        "```\n",
        "\n",
        "Exemplo:\n",
        "```sql\n",
        "SELECT COUNT(id_cliente) AS QUANTIDADE\n",
        "FROM transacoes\n",
        "WHERE id_cliente = 1\n",
        "```\n",
        "\n",
        "Resultado:\n",
        "\n",
        "| QUANTIDADE |\n",
        "|------------|\n",
        "| 3 |\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "RJaiLiVwGKVN"
      },
      "source": [
        "## **1.2 Cláusula *group by***\n",
        "\n",
        "O comando GROUP BY agrupa linhas que contém as mesmas condições e sumariza-os. Voce poderia informações por loja, clientes, entre outros critérios pertinentes a cada aplicação.\n",
        "\n",
        "No SQL Server: \n",
        "\n",
        "```sql\n",
        "SELECT <coluna1>, <coluna2>, ..., \n",
        "FROM <nome_tabela>\n",
        "WHERE <condicao>\n",
        "GROUP BY <nome_coluna>\n",
        "ORDER BY <nome_coluna>;\n",
        "```\n",
        "\n",
        "No exemplo:\n",
        "\n",
        "\n",
        "```sql\n",
        "SELECT COUNT(id_loja) AS #TRANSACOES_LOJA, id_loja AS loja\n",
        "FROM transacoes\n",
        "GROUP BY id_loja;\n",
        "```\n",
        "\n",
        "Importante: o # não é aceito no SQL Server. Remova-o para testar no site https://sqliteonline.com/.\n",
        "\n",
        "\n",
        "Resultado:\n",
        "\n",
        "|#TRANSACOES_LOJA | loja |\n",
        "|----------------|-------|\n",
        "|1|extra|\n",
        "|1|giraffas|\n",
        "|2|magalu|\n",
        "|1|postoshell|\n",
        "|1|seveneleven|\n",
        "|1|shopee|\n",
        "|2|subway|\n",
        "\n",
        "\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "48xTKCdcRmn-"
      },
      "source": [
        "#2. Funções min / max / sum / avg\n",
        "\n",
        "Diversas funções estão disponível no SQL. Podemos realizar uma análise exploratória no própio Athena ou em outro sistema de banco de dados combinando tudo que aprendemos até agora e o que ainda veremos nesse curso. \n",
        "\n",
        "Hoje veremos as principais funções utilizadas no SQL. "
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "pt_bfOGERti7"
      },
      "source": [
        "## **2.1 Função min**"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "-w0YHoOkTwXg"
      },
      "source": [
        "A função min retorna o menor valor da coluna indicada de acordo com as condições solicitadas.\n",
        "\n",
        "```sql\n",
        "SELECT MIN(<nome_coluna>)\n",
        "FROM <nome_tabela>\n",
        "WHERE <condicao>;\n",
        "```\n",
        "\n",
        "Exemplo:\n",
        "\n",
        "```sql\n",
        "SELECT MIN(valor), id_loja\n",
        "FROM transacoes\n",
        "WHERE id_cliente = 1;\n",
        "```\n",
        "\n",
        "Resultado:\n",
        "\n",
        "| MIN(valor) | id_loja|\n",
        "|----|---|\n",
        "| 15.70| subway|"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "8l0zKzuLR0AS"
      },
      "source": [
        "## **2.2 Função max**\n",
        "\n",
        "A função max retorna o maior valor da coluna indicada de acordo com as condições solicitadas.\n",
        "\n",
        "```sql\n",
        "SELECT MAX(<nome_coluna>)\n",
        "FROM <nome_tabela>\n",
        "WHERE <condicao>;\n",
        "```\n",
        "\n",
        "Exemplo:\n",
        "\n",
        "```sql\n",
        "SELECT MAX(valor), id_loja\n",
        "FROM transacoes\n",
        "WHERE id_cliente = 1;\n",
        "```\n",
        "\n",
        "Resultado:\n",
        "\n",
        "| MAX(valor) | id_loja|\n",
        "|----|---|\n",
        "| 2000.90| magalu|"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "RjwfAhP9Tnmy"
      },
      "source": [
        "## **2.3. Função sum**\n",
        "\n",
        "A função sum retorna a soma dos valores da coluna indicada de acordo com as condições solicitadas.\n",
        "\n",
        "```sql\n",
        "SELECT SUM(<nome_coluna>)\n",
        "FROM <nome_tabela>\n",
        "WHERE <condicao>;\n",
        "```\n",
        "\n",
        "Exemplo:\n",
        "\n",
        "```sql\n",
        "SELECT SUM(valor) \n",
        "FROM transacoes\n",
        "WHERE id_cliente = 1;\n",
        "```\n",
        "\n",
        "Resultado:\n",
        "\n",
        "| SUM(valor) |  \n",
        "|----| \n",
        "| 2067.3399999997|  "
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "MJCHWQJzTrco"
      },
      "source": [
        "## **2.4. Função avg**\n",
        "\n",
        "\n",
        "A função avg retorna a média dos valores da coluna indicada de acordo com as condições solicitadas.\n",
        "\n",
        "```sql\n",
        "SELECT AVG(<nome_coluna>)\n",
        "FROM <nome_tabela>\n",
        "WHERE <condicao>;\n",
        "```\n",
        "\n",
        "Exemplo:\n",
        "\n",
        "```sql\n",
        "SELECT AVG(valor) AS media_magalu\n",
        "FROM transacoes\n",
        "WHERE id_loja = 'magalu';\n",
        "```\n",
        "\n",
        "Resultado:\n",
        "\n",
        "| media_magalu |  \n",
        "|----| \n",
        "| 1025.82| "
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "FrA84v9uR7XJ"
      },
      "source": [
        "# 3. Cláusula having\n",
        "\n",
        "\n",
        "Quando a condição é acompanhada de uma função (sum, avg, min, max, count, ...) utilizamos o comando HAVING ao invéz do WHERE. \n",
        "\n",
        "```sql\n",
        "SELECT column_name(s)\n",
        "FROM table_name\n",
        "GROUP BY column_name(s)\n",
        "HAVING condition\n",
        "```\n",
        "\n",
        "Exemplo:\n",
        "\n",
        "```sql\n",
        "SELECT COUNT(id_cliente), id_loja \n",
        "FROM transacoes\n",
        "GROUP BY id_loja\n",
        "HAVING COUNT(id_cliente) > 1;\n",
        "```\n",
        "\n",
        "Resultado: \n",
        "\n",
        "| COUNT(id_cliente) | id_loja |\n",
        "|-|-|\n",
        "|2 | magalu|\n",
        "| 2 | subway| "
      ]
    }
  ]
}