Fugindo um pouco do assunto: Em 03:16, se JobTitle fosse uma chave candidata, seria correto assumir que não precisaríamos usar o groupby para a função de agregação? Pois o valores da couna seriam únicos.
Olá! Muito bom o seu vídeo. Bem, por mais que eu tenha estudado e "entendido" os motivos da CTEs, ainda não consigo imaginar a diferença dela de uma simples consulta no select sem que eu faça uma view. Digamos que eu faça esse select aí, mas não crie view. Basta eu chamar o select a hora que eu quiser. Por isso que eu não consigo entender ainda a utilidade da cte, mesmo sabendo que ela é necessária para quem entendeu. Uma coisa que eu vi da cte que é bom, é não precisar fazer Join. Você junta duas tabelas sem essa necessidade com o comando Union, algo assim.
@Rodolpho, excelente comentario. A CTE e usada quando voce quer escrever uma consulta mais legivel, simples assim! Pense numa situacao em que voce precise referenciar uma subconsulta varias vezes na consulta principal, exemplo abaixo. WITH sales_cte AS ( SELECT salesperson_id, SUM(sale_amount) AS total_sales FROM sales GROUP BY salesperson_id ) SELECT salesperson_id, total_sales, total_sales * 0.1 AS commission FROM sales_cte WHERE total_sales > 1000; Neste exemplo referenciamos 'total_sales' varias vezes na consulta principal (2 vezes no SELECT e 1 vez no WHERE). Se nao tivessemos criado a sales_cte, teriamos que escrever SUM(sale_amount) varias vezes no SELECT statement. Com a CTE, nós a referenciamos SUM(sale_amount) uma única vez na CTE e, em seguida, usamos a CTE na consulta principal. Ficou claro pra voce? CTE vs View CTE e Views tem abordagens diferentes para lidar com consultas repetitivas. As Views são permanentes, pois são OBJETOS no banco de dados e podem ser referenciadas por VARIAS consultas ao longo do tempo. As CTEs são usadas em consultas mais simples e que precisam ser resolvidas rapidamente. Views são usadas em consultas mais complexas e que precisam ser referenciadas várias vezes ao longo do tempo. Deixe-me saber se ficou claro. Espero ter lhe ajudado!🙂
@@drlucienegomes, excelente ajudou bastante quanto a funcionalidade ou utilidade da cte. Realmente o código tornou se muito bem legível. Em analise de dados com Pandas no Python or Dplyr no R, temos sempre a possibilidade de armazenar como objectos (com operador de assignment), os resultados obtidos duma execução do bloco de código/instrução, e chamar posteriormente para visualizar os resultados, reutilizar para mais análises , etc,.....
Você certamente pode ter vários CTEs em uma única expressão de consulta. Você só precisa separá-los com uma vírgula. Aqui está um exemplo. No exemplo abaixo, há dois CTEs. Um é denominado CategoryAndNumberOfProducts e o segundo é denominado ProductsOverTenDollars. WITH CategoryAndNumberOfProducts (CategoryID, CategoryName, NumberOfProducts) AS ( SELECT CategoryID, CategoryName, (SELECT COUNT(1) FROM Products p WHERE p.CategoryID = c.CategoryID) as NumberOfProducts FROM Categories c ) , ProductsOverTenDollars (ProductID, CategoryID, ProductName, UnitPrice) AS ( SELECT ProductID, CategoryID, ProductName, UnitPrice FROM Products p WHERE UnitPrice > 10.0 ) SELECT c.CategoryName, c.NumberOfProducts, p.ProductName, p.UnitPrice FROM ProductsOverTenDollars p INNER JOIN CategoryAndNumberOfProducts c ON p.CategoryID = c.CategoryID ORDER BY ProductName
Muito bacana. Uma excelente alternativa ao CREATE TABLE #NameTable em ETL. Vlw professora
Muito bom!!!
Ótima didática. 🎉
Parabéns!
muito bom !
Fantástico conteúdo 🎉
Muito bom o vídeo e sua didática, gostei muito!
Fugindo um pouco do assunto:
Em 03:16, se JobTitle fosse uma chave candidata, seria correto assumir que não precisaríamos usar o groupby para a função de agregação? Pois o valores da couna seriam únicos.
Muito bom o vídeo!
Olá!
Muito bom o seu vídeo. Bem, por mais que eu tenha estudado e "entendido" os motivos da CTEs, ainda não consigo imaginar a diferença dela de uma simples consulta no select sem que eu faça uma view.
Digamos que eu faça esse select aí, mas não crie view. Basta eu chamar o select a hora que eu quiser.
Por isso que eu não consigo entender ainda a utilidade da cte, mesmo sabendo que ela é necessária para quem entendeu.
Uma coisa que eu vi da cte que é bom, é não precisar fazer Join. Você junta duas tabelas sem essa necessidade com o comando Union, algo assim.
@Rodolpho, excelente comentario.
A CTE e usada quando voce quer escrever uma consulta mais legivel, simples assim! Pense numa situacao em que voce precise referenciar uma subconsulta varias vezes na consulta principal, exemplo abaixo.
WITH sales_cte AS (
SELECT salesperson_id, SUM(sale_amount) AS total_sales
FROM sales
GROUP BY salesperson_id
)
SELECT salesperson_id, total_sales,
total_sales * 0.1 AS commission
FROM sales_cte
WHERE total_sales > 1000;
Neste exemplo referenciamos 'total_sales' varias vezes na consulta principal (2 vezes no SELECT e 1 vez no WHERE). Se nao tivessemos criado a sales_cte, teriamos que escrever SUM(sale_amount) varias vezes no SELECT statement. Com a CTE, nós a referenciamos SUM(sale_amount) uma única vez na CTE e, em seguida, usamos a CTE na consulta principal.
Ficou claro pra voce?
CTE vs View
CTE e Views tem abordagens diferentes para lidar com consultas repetitivas. As Views são permanentes, pois são OBJETOS no banco de dados e podem ser referenciadas por VARIAS consultas ao longo do tempo. As CTEs são usadas em consultas mais simples e que precisam ser resolvidas rapidamente. Views são usadas em consultas mais complexas e que precisam ser referenciadas várias vezes ao longo do tempo.
Deixe-me saber se ficou claro.
Espero ter lhe ajudado!🙂
@@drlucienegomes, excelente ajudou bastante quanto a funcionalidade ou utilidade da cte. Realmente o código tornou se muito bem legível. Em analise de dados com Pandas no Python or Dplyr no R, temos sempre a possibilidade de armazenar como objectos (com operador de assignment), os resultados obtidos duma execução do bloco de código/instrução, e chamar posteriormente para visualizar os resultados, reutilizar para mais análises , etc,.....
Eu consigo fazer duas CTE´s na mesma consulta?
Você certamente pode ter vários CTEs em uma única expressão de consulta. Você só precisa separá-los com uma vírgula. Aqui está um exemplo. No exemplo abaixo, há dois CTEs. Um é denominado CategoryAndNumberOfProducts e o segundo é denominado ProductsOverTenDollars.
WITH CategoryAndNumberOfProducts (CategoryID, CategoryName, NumberOfProducts) AS
(
SELECT
CategoryID,
CategoryName,
(SELECT COUNT(1) FROM Products p
WHERE p.CategoryID = c.CategoryID) as NumberOfProducts
FROM Categories c
)
, ProductsOverTenDollars (ProductID, CategoryID, ProductName, UnitPrice) AS
(
SELECT
ProductID,
CategoryID,
ProductName,
UnitPrice
FROM Products p
WHERE UnitPrice > 10.0
)
SELECT c.CategoryName, c.NumberOfProducts,
p.ProductName, p.UnitPrice
FROM ProductsOverTenDollars p
INNER JOIN CategoryAndNumberOfProducts c ON
p.CategoryID = c.CategoryID
ORDER BY ProductName