Pular para o conteúdo
Visualizando 6 posts - 1 até 6 (de 6 do total)
  • Autor
    Posts
  • #103144
    Avatar de norronorro
    Participante

      pessoal estou tentando resolver uma lista de exercicios pra eu ver se consigo aprender PL/SQL, começei a fazer essas querys e consigo faze-las em parte. Tipo eu consigo fazer a metade delas. Aqui vai duas que eu to com dúvida.

      Liste os cargos dos funcionários que possuem salário superior a R$ 1.000,00 e que venderam, no mês de outubro de 2012, mais de R$ 10.000,00 em produtos.
      select cargo.car_descricao from cargo, funcionarios
      where cargo.car_codigo = funcionarios.fun_car_codigo
      and funcionarios.fun_salario > 1000

      [b]
      Obtenha os clientes com quantidade de pontos superior a 10000 e que no ano de 2011 realizaram compras com valores inferiores a R$ 5.000.[/b]
      select pessoas.pss_nome from pessoas, clientes
      where pessoas.pss_codigo = clientes.cli_pss_codigo
      and clientes.cli_pontos > 1000

      alguém sabe como posso completa-las ? tipo a lógica ?
      as tabelas que eu criei são cargo, clientes, funcionários,produto, pessoas, venda, produto_venda

      desde já agradeço.

      #103146
      Avatar de rmanrman
      Participante

        @norro

        Esse tipo de consulta não precisa de PL/SQL, SQL puro já é o suficiente.

        Para ajudar nessas consultas poste um modelo relacional, ai fica mais fácil.

        #103148
        Avatar de norronorro
        Participante

          oi rman. aqui esta o modelo. era esse ?

          [url=http://imageshack.us/photo/my-images/685/25575164.png/:34xgtts0]

          Uploaded with ImageShack.us[/img]

          #103174
          Avatar de rmanrman
          Participante

            @norro

            Acho que ficou faltando algo na entidade VENDA, eu assumi que no lugar do COD_PESSOA o correto é COD_PESSOA_CLIENTE e COD_PESSOA_FUNCIONARIO.

            Segue a solução:

            1-

            SELECT C.DESCRICAO
            FROM CARGO C
            WHERE EXISTS(
            SELECT 1
            FROM FUNCIONARIO F
            WHERE F.COD_CARGO = C.COD_CARGO
            AND F.SALARIO > 1000
            AND EXISTS(
            SELECT 1
            FROM PESSOA P
            WHERE P.COD_PESSOA = F.COD_PESSOA
            AND (
            SELECT SUM(TOTAL)
            FROM VENDA V
            WHERE V.COD_PESSOA_FUNCIONARIO = P.COD_PESSOA
            AND EXTRACT(YEAR FROM V.DATA) = 2012
            AND EXTRACT(MONTH FROM V.DATA) = 10
            ) > 10000
            )
            )

            2-

            SELECT P.NOME
            FROM PESSOA P
            WHERE EXISTS(
            SELECT 1
            FROM CLIENTE C
            WHERE C.COD_PESSOA = P.COD_PESSOA
            AND C.PONTOS > 10000
            )
            AND ANY(
            SELECT TOTAL
            FROM VENDA V
            WHERE V.COD_PESSOA_CLIENTE = P.COD_PESSOA
            AND EXTRACT(YEAR FROM V.DATA) = 2011
            ) < 5000

            #103178
            Avatar de norronorro
            Participante

              rman muito obrigado. vou tentar aqui pra ver se deu certo. Obrigado mesmo. tenho só mais uma duvida mas só vou perguntar se eu conseguir resolver essas. pra não ficar aperriando hehe. e tem outra questão só que essa eu consegui fazer !! vou por também(pra ficar de apoio pra quem tiver duvidas).
              até breve.

              #103183
              Avatar de norronorro
              Participante

                bem estou aqui como prometi. Consegui completar essas 2 querys.
                aqui abaixo esta uma das querys que ja estava feita. 🙂

                nela eu pego os funcionarios que tem endereco CABO na descricao e que venderam mais de 1000 em produtos para moradores que tem TORRE como endereco .

                select
                SUM(ven_total),
                NVL(pss_fone,'sem telefone')
                FROM
                pessoas, vendas,
                WHERE
                pessoas.pss_endereco LIKE '%CABO%'
                AND pessoas.pss_endereco LIKE '%TORRE%'
                AND funcionarios.fun_pss_codigo = pessoas.pss_codigo
                AND clientes.cli_pss_codigo = pessoas.pss_codigo
                GROUP BY
                NVL(pessoas.pss_fone)
                HAVING
                SUM(vendas.ven_total) > 1000

                aqui vai mais duas que, uma eu fiz mais não estou conseguindo rodar… da um erro nela diz que o from ta errado.

                — 1 Liste o valor total de vendas realizadas por TIPO de cliente,
                –devendo a listagem diferenciar Pessoas jurídicas e Pessoas Físicas
                –com estes rótulos específicos retornados na consulta.


                select sum(ven_total)
                case
                when
                pss_tipo = 'F'
                then
                'Fisica'
                when
                pss_tipo ='J'
                then
                'Juridica'
                end
                from estudo.pessoas, estudo.vendas
                where estudo.vendas.ven_cli_pss_codigo = estudo.pessoas.pss_codigo
                group by estudo.pessoas.pss_codigo, estudo.pessoas.pss_endereco, estudo.pessoas.pss_tipo

                e agora vem minha principal dúvida. Alguem pode me ajudar em como criar um cursor pra retornar a quantidade total de produtos que foram vendidos em cada mes desse ano ?

              Visualizando 6 posts - 1 até 6 (de 6 do total)
              • Você deve fazer login para responder a este tópico.
              plugins premium WordPress