Mode blogg

här i läget lägger vi stor vikt vid att skriva bra, ren SQL. Som samarbetsteam är det viktigt att våra frågor lätt kan läsas och förstås av våra lagkamrater. En konvention vi har antagit är användningen av vanliga tabelluttryck (CTEs).

vad är vanliga tabelluttryck?

vanliga tabelluttryck är tillfälliga namngivna resultatuppsättningar som finns för bara en fråga. De börjar med en WITH, följt av ett uttrycksnamn och en fråga som definierar resultatuppsättningen., Med hjälp av denna konvention kan du definiera flera uttryck i en fråga. När de definierats kan dessa uttryck refereras upprepade gånger under resten av din fråga (precis som du skulle hänvisa till permanenta databastabeller eller vyer).,

medan vanliga tabelluttryck fungerar på samma sätt som subqueries, har de flera fördelar, inklusive:

  • möjligheten att referera till samma tillfälliga resultatuppsättning upprepade gånger över frågan
  • förbättrad läsbarhet för samarbete och felsökning
  • bättre synlighet i vanliga resultatuppsättningar som är bra kandidater för att bli permanenta tabeller/vyer

ett praktiskt exempel

låt oss ta ett exempel med hjälp av data i demo schema av mode offentliga lager, vilket innebär en hypotetisk pappersföretag., Antag att du arbetar för detta företag och du vill nå ut till stora kunder som har haft dåliga leveranserfarenheter. Efter att ha pratat med säljteamet bestämmer du dig för att definiera ”stora kunder” som ett konto med $100k eller mer i livstidsintäkter, och du definierar dåliga fraktupplevelser som något konto som har haft flera order med misslyckade sändningar.

en strömlinjeformad metod för att identifiera konton som uppfyller båda dessa kriterier är att använda ett gemensamt tabelluttryck, som i det här exemplet.,

Bryt ner det

  • Med: aWITH är nödvändigt för att sparka igång din vanliga tabelluttryck fråga.
 WITH 
  • uttryck 1:account_failed_shipments. Vårt första uttryck returnerar räkningen av misslyckade sändningar för alla konton som har haft minst en. Syntaktiskt börjar vi med att namnge uttrycket i formatet expression_name as (. Vi kommer nu att kunna referera till detta namn som om det var en tabell i vår databas under resten av frågan., Det som följer är en typisk fråga, som i det här exemplet grupperar misslyckade sändningar per konto. Slutligen avslutar vi uttrycket med en sluten parentes. Observera att eftersom detta inte är det sista uttrycket i vår fråga följs den slutna parentesen av ett komma.
  • uttryck 2:account_lifetime_revenue. Vårt andra uttryck returnerar den totala summan av intäkter per konto. Det är identiskt i struktur till uttryck 1, med ett undantag-eftersom det är det slutliga uttrycket i vår fråga följs inte den slutna parentesen av ett komma.,
 account_lifetime_revenue as ( SELECT o.account_id, SUM(o.total_amt_usd) as amount FROM demo.orders o GROUP BY 1 )
  • slutlig fråga: slutligen har vi den slutliga frågan själv som kommer att returnera vår resultatuppsättning. Detta bör se ganska ut som någon traditionell fråga, med undantag för de två sista anslutningarna som referensuttryck vi tidigare har definierat, i motsats till tabeller i vår databas.

vanliga tabelluttryck hjälper oss att arbeta mer effektivt

vanliga tabelluttryck är mycket värdefulla metoder för att dela upp komplexa frågor, särskilt när de involverar kombinationer av flera begrepp., Eftersom varje uttryck är tydligt namngiven och definierad är felsökning mycket lättare (speciellt om du använder highlight-to-run i läge).

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *