<!-- CANARY: REQ=REQ-DOCS-001; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-15 -->
<h2 id="computed-properties" class="position-relative d-flex align-items-center group">
<span>Computed Properties</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="computed-properties"
aria-haspopup="dialog"
aria-label="Share link: Computed Properties">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h2><div id="headingShareModal" class="heading-share-modal" role="dialog" aria-modal="true" aria-labelledby="headingShareTitle" hidden>
<div class="hsm-dialog" role="document">
<div class="hsm-header">
<h2 id="headingShareTitle" class="h6 mb-0 fw-bold">Share this section</h2>
<button type="button" class="hsm-close" aria-label="Close">
<i class="fa-solid fa-xmark"></i>
</button>
</div>
<div class="hsm-body">
<label for="headingShareInput" class="form-label small text-muted mb-1 text-uppercase fw-bold" style="font-size: 0.7rem; letter-spacing: 0.5px;">Permalink</label>
<div class="input-group mb-4 hsm-url-group">
<input id="headingShareInput" type="text" class="form-control font-monospace" readonly aria-readonly="true" style="font-size: 0.85rem;" />
<button class="btn btn-primary hsm-copy" type="button" aria-label="Copy" title="Copy">
<i class="fa-duotone fa-clipboard" aria-hidden="true"></i>
</button>
</div>
<div class="small fw-bold mb-2 text-muted text-uppercase" style="font-size: 0.7rem; letter-spacing: 0.5px;">Share via</div>
<div class="hsm-share-grid">
<a id="share-twitter" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer">
<i class="fa-brands fa-twitter me-2"></i>Twitter
</a>
<a id="share-linkedin" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer">
<i class="fa-brands fa-linkedin me-2"></i>LinkedIn
</a>
<a id="share-facebook" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer">
<i class="fa-brands fa-facebook me-2"></i>Facebook
</a>
</div>
</div>
</div>
</div>
<style>
.heading-share-modal {
position: fixed;
inset: 0;
display: flex;
justify-content: center;
align-items: center;
background: rgba(0, 0, 0, 0.6);
z-index: 1050;
padding: 1rem;
backdrop-filter: blur(4px);
-webkit-backdrop-filter: blur(4px);
}
.heading-share-modal[hidden] { display: none !important; }
.hsm-dialog {
max-width: 420px;
width: 100%;
background: var(--bs-body-bg, #fff);
color: var(--bs-body-color, #212529);
border: 1px solid var(--bs-border-color, rgba(0,0,0,0.1));
border-radius: 1rem;
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
overflow: hidden;
animation: hsm-fade-in 0.2s ease-out;
}
@keyframes hsm-fade-in {
from { opacity: 0; transform: scale(0.95); }
to { opacity: 1; transform: scale(1); }
}
[data-bs-theme="dark"] .hsm-dialog {
background: #1e293b;
border-color: rgba(255,255,255,0.1);
color: #f8f9fa;
}
.hsm-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 1rem 1.5rem;
border-bottom: 1px solid var(--bs-border-color, rgba(0,0,0,0.1));
background: rgba(0,0,0,0.02);
}
[data-bs-theme="dark"] .hsm-header {
background: rgba(255,255,255,0.02);
border-color: rgba(255,255,255,0.1);
}
.hsm-close {
background: transparent;
border: none;
color: inherit;
opacity: 0.5;
padding: 0.25rem 0.5rem;
border-radius: 0.25rem;
font-size: 1.2rem;
line-height: 1;
transition: opacity 0.2s;
}
.hsm-close:hover {
opacity: 1;
}
.hsm-body {
padding: 1.5rem;
}
.hsm-url-group {
display: flex !important;
align-items: stretch;
}
.hsm-url-group .form-control {
flex: 1;
min-width: 0;
margin: 0;
background: var(--bs-secondary-bg, #f8f9fa);
border-color: var(--bs-border-color, #dee2e6);
border-top-right-radius: 0;
border-bottom-right-radius: 0;
height: 42px;
}
.hsm-url-group .btn {
flex: 0 0 auto;
margin: 0;
margin-left: -1px;
border-top-left-radius: 0;
border-bottom-left-radius: 0;
height: 42px;
display: flex;
align-items: center;
justify-content: center;
padding: 0 1.25rem;
z-index: 2;
}
[data-bs-theme="dark"] .hsm-url-group .form-control {
background: #0f172a;
border-color: #334155;
color: #e2e8f0;
}
.hsm-share-grid {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.hsm-share-grid .btn {
display: flex;
align-items: center;
justify-content: center;
font-size: 0.9rem;
padding: 0.6rem;
border-color: var(--bs-border-color);
width: 100%;
}
[data-bs-theme="dark"] .hsm-share-grid .btn {
color: #e2e8f0;
border-color: #475569;
}
[data-bs-theme="dark"] .hsm-share-grid .btn:hover {
background: #334155;
border-color: #cbd5e1;
}
</style>
<script>
(function(){
const modal = document.getElementById('headingShareModal');
if(!modal) return;
const input = modal.querySelector('#headingShareInput');
const copyBtn = modal.querySelector('.hsm-copy');
const twitter = modal.querySelector('#share-twitter');
const linkedin = modal.querySelector('#share-linkedin');
const facebook = modal.querySelector('#share-facebook');
const closeBtn = modal.querySelector('.hsm-close');
let lastFocus=null;
let trapBound=false;
function buildUrl(id){ return window.location.origin + window.location.pathname + '#' + id; }
function isOpen(){ return !modal.hasAttribute('hidden'); }
function hydrate(id){
const url=buildUrl(id);
input.value=url;
const enc=encodeURIComponent(url);
const text=encodeURIComponent(document.title);
if(twitter) twitter.href=`https://twitter.com/intent/tweet?url=${enc}&text=${text}`;
if(linkedin) linkedin.href=`https://www.linkedin.com/sharing/share-offsite/?url=${enc}`;
if(facebook) facebook.href=`https://www.facebook.com/sharer/sharer.php?u=${enc}`;
}
function openModal(id){
lastFocus=document.activeElement;
hydrate(id);
if(!isOpen()){
modal.removeAttribute('hidden');
}
requestAnimationFrame(()=>{ input.focus(); });
trapFocus();
}
function closeModal(){
if(!isOpen()) return;
modal.setAttribute('hidden','');
if(lastFocus && typeof lastFocus.focus==='function') lastFocus.focus();
}
function copyCurrent(){
try{ navigator.clipboard.writeText(input.value).then(()=>feedback(true),()=>fallback()); }
catch(e){ fallback(); }
}
function fallback(){ input.select(); try{ document.execCommand('copy'); feedback(true);}catch(e){ feedback(false);} }
function feedback(ok){ if(!copyBtn) return; const icon=copyBtn.querySelector('i'); if(!icon) return; const prev=copyBtn.getAttribute('data-prev')||icon.className; if(!copyBtn.getAttribute('data-prev')) copyBtn.setAttribute('data-prev',prev); icon.className= ok ? 'fa-duotone fa-clipboard-check':'fa-duotone fa-circle-exclamation'; setTimeout(()=>{ icon.className=prev; },1800); }
function handleShareClick(e){ e.preventDefault(); const btn=e.currentTarget; const id=btn.getAttribute('data-share-target'); if(id) openModal(id); }
function bindShareButtons(){
document.querySelectorAll('.h-share').forEach(btn=>{
if(!btn.dataset.hShareBound){ btn.addEventListener('click', handleShareClick); btn.dataset.hShareBound='1'; }
});
}
bindShareButtons();
if(document.readyState==='loading'){
document.addEventListener('DOMContentLoaded', bindShareButtons);
} else {
requestAnimationFrame(bindShareButtons);
}
document.addEventListener('click', function(e){
const shareBtn=e.target.closest && e.target.closest('.h-share');
if(shareBtn && !shareBtn.dataset.hShareBound){ handleShareClick.call(shareBtn, e); }
}, true);
document.addEventListener('click', e=>{
if(e.target===modal) closeModal();
if(e.target.closest && e.target.closest('.hsm-close')){ e.preventDefault(); closeModal(); }
if(copyBtn && (e.target===copyBtn || (e.target.closest && e.target.closest('.hsm-copy')))) { e.preventDefault(); copyCurrent(); }
});
document.addEventListener('keydown', e=>{ if(e.key==='Escape' && isOpen()) closeModal(); });
function trapFocus(){
if(trapBound) return;
trapBound=true;
modal.addEventListener('keydown', f=>{ if(f.key==='Tab' && isOpen()){ const focusable=[...modal.querySelectorAll('a[href],button,input,textarea,select,[tabindex]:not([tabindex="-1"])')].filter(el=>!el.hasAttribute('disabled')); if(!focusable.length) return; const first=focusable[0]; const last=focusable[focusable.length-1]; if(f.shiftKey && document.activeElement===first){ f.preventDefault(); last.focus(); } else if(!f.shiftKey && document.activeElement===last){ f.preventDefault(); first.focus(); } } });
}
if(closeBtn) closeBtn.addEventListener('click', e=>{ e.preventDefault(); closeModal(); });
})();
</script><p>Computed properties are node or edge properties whose values are automatically calculated from other data through formulas and expressions. Unlike stored properties that persist static values, computed properties derive their values dynamically from base properties, relationships, or aggregations, ensuring they always reflect the current state of your graph. Computed properties are type-safe, indexable, and eliminate data redundancy while maintaining query performance.</p>
<h3 id="computed-property-fundamentals" class="position-relative d-flex align-items-center group">
<span>Computed Property Fundamentals</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="computed-property-fundamentals"
aria-haspopup="dialog"
aria-label="Share link: Computed Property Fundamentals">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="what-are-computed-properties" class="position-relative d-flex align-items-center group">
<span>What are Computed Properties?</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="what-are-computed-properties"
aria-haspopup="dialog"
aria-label="Share link: What are Computed Properties?">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Computed properties are dynamically calculated:</p>
<p><strong>Formula-Based</strong> - Derived from expressions
<strong>Always Current</strong> - Automatically recalculated
<strong>Type-Safe</strong> - Strongly typed results
<strong>Indexed</strong> - Can be indexed for queries</p>
<h4 id="use-cases" class="position-relative d-flex align-items-center group">
<span>Use Cases</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="use-cases"
aria-haspopup="dialog"
aria-label="Share link: Use Cases">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><ul>
<li><strong>Derived Values</strong> - Full name from first/last</li>
<li><strong>Calculations</strong> - Age from birthdate</li>
<li><strong>Aggregations</strong> - Total from line items</li>
<li><strong>Transformations</strong> - Uppercase email</li>
</ul>
<h3 id="defining-computed-properties" class="position-relative d-flex align-items-center group">
<span>Defining Computed Properties</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="defining-computed-properties"
aria-haspopup="dialog"
aria-label="Share link: Defining Computed Properties">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="simple-computations" class="position-relative d-flex align-items-center group">
<span>Simple Computations</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="simple-computations"
aria-haspopup="dialog"
aria-label="Share link: Simple Computations">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Property</span><span class="w"> </span><span class="kd">type</span><span class="w"> </span><span class="nc">with</span><span class="w"> </span><span class="py">computed</span><span class="w"> </span><span class="py">fields</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">PROPERTY</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">Person</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">first_name</span><span class="w"> </span><span class="py">STRING</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">last_name</span><span class="w"> </span><span class="py">STRING</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">birthdate</span><span class="w"> </span><span class="py">DATE</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Computed</span><span class="w"> </span><span class="py">properties</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">full_name</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="py">first_name</span><span class="w"> </span><span class="p">||</span><span class="w"> </span><span class="err">'</span><span class="w"> </span><span class="err">'</span><span class="w"> </span><span class="p">||</span><span class="w"> </span><span class="py">last_name</span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">age</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="py">YEAR</span><span class="p">(</span><span class="py">CURRENT_DATE</span><span class="p">)</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">YEAR</span><span class="p">(</span><span class="py">birthdate</span><span class="p">)),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">initials</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SUBSTRING</span><span class="p">(</span><span class="py">first_name</span><span class="p">,</span><span class="w"> </span><span class="py">1</span><span class="p">,</span><span class="w"> </span><span class="py">1</span><span class="p">)</span><span class="w"> </span><span class="p">||</span><span class="w"> </span><span class="py">SUBSTRING</span><span class="p">(</span><span class="py">last_name</span><span class="p">,</span><span class="w"> </span><span class="py">1</span><span class="p">,</span><span class="w"> </span><span class="py">1</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="aggregations" class="position-relative d-flex align-items-center group">
<span>Aggregations</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="aggregations"
aria-haspopup="dialog"
aria-label="Share link: Aggregations">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Compute from relationships:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="py">CREATE</span><span class="w"> </span><span class="py">PROPERTY</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">User</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">id</span><span class="w"> </span><span class="py">STRING</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">name</span><span class="w"> </span><span class="py">STRING</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Count</span><span class="w"> </span><span class="py">relationships</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">friend_count</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FRIEND</span><span class="p">]</span><span class="err">-></span><span class="p">(:</span><span class="nc">Person</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Sum</span><span class="w"> </span><span class="py">values</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">total_spent</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="py">SUM</span><span class="p">(</span><span class="py">amount</span><span class="p">)</span><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">PLACED</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">o</span><span class="p">:</span><span class="nc">Order</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="conditional-logic" class="position-relative d-flex align-items-center group">
<span>Conditional Logic</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="conditional-logic"
aria-haspopup="dialog"
aria-label="Share link: Conditional Logic">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Use CASE expressions:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="py">CREATE</span><span class="w"> </span><span class="py">PROPERTY</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">Account</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">balance</span><span class="w"> </span><span class="py">DECIMAL</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">credit_score</span><span class="w"> </span><span class="py">INTEGER</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Account</span><span class="w"> </span><span class="py">status</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">status</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">CASE</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">balance</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">0</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="err">'</span><span class="py">overdrawn</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">balance</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">100</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="err">'</span><span class="py">low_balance</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">balance</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">10000</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="err">'</span><span class="py">standard</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ELSE</span><span class="w"> </span><span class="err">'</span><span class="py">premium</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">END</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Credit</span><span class="w"> </span><span class="py">tier</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">credit_tier</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">CASE</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">credit_score</span><span class="w"> </span><span class="err">></span><span class="p">=</span><span class="w"> </span><span class="py">800</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="err">'</span><span class="py">excellent</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">credit_score</span><span class="w"> </span><span class="err">></span><span class="p">=</span><span class="w"> </span><span class="py">700</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="err">'</span><span class="py">good</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">credit_score</span><span class="w"> </span><span class="err">></span><span class="p">=</span><span class="w"> </span><span class="py">600</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="err">'</span><span class="py">fair</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ELSE</span><span class="w"> </span><span class="err">'</span><span class="py">poor</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">END</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="querying-computed-properties" class="position-relative d-flex align-items-center group">
<span>Querying Computed Properties</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="querying-computed-properties"
aria-haspopup="dialog"
aria-label="Share link: Querying Computed Properties">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="filtering" class="position-relative d-flex align-items-center group">
<span>Filtering</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="filtering"
aria-haspopup="dialog"
aria-label="Share link: Filtering">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Use in WHERE clauses:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Find</span><span class="w"> </span><span class="py">users</span><span class="w"> </span><span class="py">by</span><span class="w"> </span><span class="py">computed</span><span class="w"> </span><span class="py">property</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">age</span><span class="w"> </span><span class="err">></span><span class="p">=</span><span class="w"> </span><span class="py">18</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">friend_count</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">50</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">age</span><span class="p">,</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">friend_count</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Filter</span><span class="w"> </span><span class="py">by</span><span class="w"> </span><span class="py">account</span><span class="w"> </span><span class="py">status</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">a</span><span class="p">:</span><span class="nc">Account</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">a</span><span class="err">.</span><span class="py">status</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">'</span><span class="py">premium</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">a</span><span class="err">.</span><span class="py">balance</span><span class="p">,</span><span class="w"> </span><span class="py">a</span><span class="err">.</span><span class="py">credit_tier</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="sorting" class="position-relative d-flex align-items-center group">
<span>Sorting</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="sorting"
aria-haspopup="dialog"
aria-label="Share link: Sorting">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Order by computed values:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Sort</span><span class="w"> </span><span class="py">by</span><span class="w"> </span><span class="py">computed</span><span class="w"> </span><span class="py">property</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">total_spent</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">total_spent</span><span class="w"> </span><span class="py">DESC</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LIMIT</span><span class="w"> </span><span class="py">10</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="indexing" class="position-relative d-flex align-items-center group">
<span>Indexing</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="indexing"
aria-haspopup="dialog"
aria-label="Share link: Indexing">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Create indexes on computed properties:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Index</span><span class="w"> </span><span class="py">computed</span><span class="w"> </span><span class="py">property</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">fast</span><span class="w"> </span><span class="py">lookup</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">idx_user_age</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">Person</span><span class="p">(</span><span class="py">age</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">idx_account_status</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">Account</span><span class="p">(</span><span class="py">status</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="performance-considerations" class="position-relative d-flex align-items-center group">
<span>Performance Considerations</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="performance-considerations"
aria-haspopup="dialog"
aria-label="Share link: Performance Considerations">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="computation-cost" class="position-relative d-flex align-items-center group">
<span>Computation Cost</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="computation-cost"
aria-haspopup="dialog"
aria-label="Share link: Computation Cost">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Be mindful of expensive computations:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Expensive</span><span class="w"> </span><span class="p">(</span><span class="py">recalculated</span><span class="w"> </span><span class="py">every</span><span class="w"> </span><span class="py">access</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">total_friends</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FRIEND</span><span class="err">*</span><span class="py">1</span><span class="err">.</span><span class="mf">.3</span><span class="p">]</span><span class="err">-></span><span class="p">(:</span><span class="nc">Person</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Better</span><span class="w"> </span><span class="p">(</span><span class="py">simpler</span><span class="w"> </span><span class="py">calculation</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">direct_friends</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FRIEND</span><span class="p">]</span><span class="err">-></span><span class="p">(:</span><span class="nc">Person</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="real-world-applications" class="position-relative d-flex align-items-center group">
<span>Real-World Applications</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="real-world-applications"
aria-haspopup="dialog"
aria-label="Share link: Real-World Applications">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="e-commerce-applications" class="position-relative d-flex align-items-center group">
<span>E-Commerce Applications</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="e-commerce-applications"
aria-haspopup="dialog"
aria-label="Share link: E-Commerce Applications">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="py">CREATE</span><span class="w"> </span><span class="py">PROPERTY</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">Product</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">base_price</span><span class="w"> </span><span class="py">DECIMAL</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">cost</span><span class="w"> </span><span class="py">DECIMAL</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">tax_rate</span><span class="w"> </span><span class="py">DECIMAL</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">discount_percentage</span><span class="w"> </span><span class="py">DECIMAL</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Computed</span><span class="w"> </span><span class="py">pricing</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">discount_amount</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="py">base_price</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">discount_percentage</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">100</span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">price_after_discount</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="py">base_price</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">discount_amount</span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">tax_amount</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="py">price_after_discount</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">tax_rate</span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">final_price</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="py">price_after_discount</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">tax_amount</span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Computed</span><span class="w"> </span><span class="py">metrics</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">profit_margin</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">((</span><span class="py">price_after_discount</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">cost</span><span class="p">)</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">price_after_discount</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">100</span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">is_profitable</span><span class="w"> </span><span class="py">BOOLEAN</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="py">profit_margin</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">0</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">PROPERTY</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">Order</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">created_at</span><span class="w"> </span><span class="py">TIMESTAMP</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">subtotal</span><span class="w"> </span><span class="py">DECIMAL</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">shipping_fee</span><span class="w"> </span><span class="py">DECIMAL</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Order</span><span class="w"> </span><span class="py">age</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">days_since_order</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">DATEDIFF</span><span class="p">(</span><span class="py">DAY</span><span class="p">,</span><span class="w"> </span><span class="py">created_at</span><span class="p">,</span><span class="w"> </span><span class="py">NOW</span><span class="p">())</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Order</span><span class="w"> </span><span class="py">status</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">is_recent</span><span class="w"> </span><span class="py">BOOLEAN</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="py">days_since_order</span><span class="w"> </span><span class="err"><</span><span class="p">=</span><span class="w"> </span><span class="py">7</span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">is_stale</span><span class="w"> </span><span class="py">BOOLEAN</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="py">days_since_order</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">90</span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Order</span><span class="w"> </span><span class="py">totals</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">total</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="py">subtotal</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">shipping_fee</span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Item</span><span class="w"> </span><span class="py">count</span><span class="w"> </span><span class="py">from</span><span class="w"> </span><span class="py">relationships</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">item_count</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">CONTAINS</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">item</span><span class="p">:</span><span class="nc">OrderItem</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="social-network-applications" class="position-relative d-flex align-items-center group">
<span>Social Network Applications</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="social-network-applications"
aria-haspopup="dialog"
aria-label="Share link: Social Network Applications">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="py">CREATE</span><span class="w"> </span><span class="py">PROPERTY</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">User</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">first_name</span><span class="w"> </span><span class="py">STRING</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">last_name</span><span class="w"> </span><span class="py">STRING</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">birthdate</span><span class="w"> </span><span class="py">DATE</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">join_date</span><span class="w"> </span><span class="py">TIMESTAMP</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Profile</span><span class="w"> </span><span class="py">display</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">full_name</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="py">first_name</span><span class="w"> </span><span class="p">||</span><span class="w"> </span><span class="err">'</span><span class="w"> </span><span class="err">'</span><span class="w"> </span><span class="p">||</span><span class="w"> </span><span class="py">last_name</span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">display_name</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">COALESCE</span><span class="p">(</span><span class="py">NULLIF</span><span class="p">(</span><span class="py">full_name</span><span class="p">,</span><span class="w"> </span><span class="err">''</span><span class="p">),</span><span class="w"> </span><span class="err">'</span><span class="py">Anonymous</span><span class="w"> </span><span class="py">User</span><span class="err">'</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Age</span><span class="w"> </span><span class="py">calculation</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">age</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">DATEDIFF</span><span class="p">(</span><span class="py">YEAR</span><span class="p">,</span><span class="w"> </span><span class="py">birthdate</span><span class="p">,</span><span class="w"> </span><span class="py">CURRENT_DATE</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">is_adult</span><span class="w"> </span><span class="py">BOOLEAN</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="py">age</span><span class="w"> </span><span class="err">></span><span class="p">=</span><span class="w"> </span><span class="py">18</span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">age_group</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">CASE</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">age</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">18</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="err">'</span><span class="py">minor</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">age</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">25</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="err">'</span><span class="py">young_adult</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">age</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">40</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="err">'</span><span class="py">adult</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">age</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">60</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="err">'</span><span class="py">middle_aged</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ELSE</span><span class="w"> </span><span class="err">'</span><span class="py">senior</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">END</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Account</span><span class="w"> </span><span class="py">tenure</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">membership_days</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">DATEDIFF</span><span class="p">(</span><span class="py">DAY</span><span class="p">,</span><span class="w"> </span><span class="py">join_date</span><span class="p">,</span><span class="w"> </span><span class="py">NOW</span><span class="p">())</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">membership_years</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="py">membership_days</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">365</span><span class="mf">.25</span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Social</span><span class="w"> </span><span class="py">metrics</span><span class="w"> </span><span class="py">from</span><span class="w"> </span><span class="py">relationships</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">follower_count</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="err"><-</span><span class="p">[:</span><span class="nc">FOLLOWS</span><span class="p">]</span><span class="err">-</span><span class="p">(</span><span class="py">follower</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">following_count</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FOLLOWS</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">following</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">friend_count</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FRIEND</span><span class="p">]</span><span class="err">-</span><span class="p">(</span><span class="py">friend</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Engagement</span><span class="w"> </span><span class="py">metrics</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">post_count</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">POSTED</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">post</span><span class="p">:</span><span class="nc">Post</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">engagement_score</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">(</span><span class="py">follower_count</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">2</span><span class="mf">.0</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">post_count</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">friend_count</span><span class="p">)</span><span class="w"> </span><span class="err">/</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">NULLIF</span><span class="p">(</span><span class="py">membership_days</span><span class="p">,</span><span class="w"> </span><span class="py">0</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">User</span><span class="w"> </span><span class="py">tier</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">user_tier</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">CASE</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">follower_count</span><span class="w"> </span><span class="err">></span><span class="p">=</span><span class="w"> </span><span class="py">10000</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="err">'</span><span class="py">influencer</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">follower_count</span><span class="w"> </span><span class="err">></span><span class="p">=</span><span class="w"> </span><span class="py">1000</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="err">'</span><span class="py">power_user</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">follower_count</span><span class="w"> </span><span class="err">></span><span class="p">=</span><span class="w"> </span><span class="py">100</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="err">'</span><span class="py">active</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ELSE</span><span class="w"> </span><span class="err">'</span><span class="py">casual</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">END</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="financial-applications" class="position-relative d-flex align-items-center group">
<span>Financial Applications</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="financial-applications"
aria-haspopup="dialog"
aria-label="Share link: Financial Applications">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="py">CREATE</span><span class="w"> </span><span class="py">PROPERTY</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">Account</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">balance</span><span class="w"> </span><span class="py">DECIMAL</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">credit_limit</span><span class="w"> </span><span class="py">DECIMAL</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">interest_rate</span><span class="w"> </span><span class="py">DECIMAL</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">monthly_fee</span><span class="w"> </span><span class="py">DECIMAL</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">minimum_balance</span><span class="w"> </span><span class="py">DECIMAL</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">opened_date</span><span class="w"> </span><span class="py">DATE</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Available</span><span class="w"> </span><span class="py">funds</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">available_credit</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="py">credit_limit</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">balance</span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">credit_utilization</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">balance</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">NULLIF</span><span class="p">(</span><span class="py">credit_limit</span><span class="p">,</span><span class="w"> </span><span class="py">0</span><span class="p">)</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">100</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Account</span><span class="w"> </span><span class="py">status</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">is_overdrawn</span><span class="w"> </span><span class="py">BOOLEAN</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="py">balance</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">0</span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">is_below_minimum</span><span class="w"> </span><span class="py">BOOLEAN</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="py">balance</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">minimum_balance</span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Account</span><span class="w"> </span><span class="py">health</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">health_score</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">CASE</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">balance</span><span class="w"> </span><span class="err">></span><span class="p">=</span><span class="w"> </span><span class="py">credit_limit</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">0</span><span class="mf">.8</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="py">100</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">balance</span><span class="w"> </span><span class="err">></span><span class="p">=</span><span class="w"> </span><span class="py">credit_limit</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">0</span><span class="mf">.5</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="py">80</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">balance</span><span class="w"> </span><span class="err">></span><span class="p">=</span><span class="w"> </span><span class="py">0</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="py">60</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">balance</span><span class="w"> </span><span class="err">></span><span class="p">=</span><span class="w"> </span><span class="py">credit_limit</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="err">-</span><span class="py">0</span><span class="mf">.2</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="py">40</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ELSE</span><span class="w"> </span><span class="py">20</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">END</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Account</span><span class="w"> </span><span class="py">age</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">account_age_months</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">DATEDIFF</span><span class="p">(</span><span class="py">MONTH</span><span class="p">,</span><span class="w"> </span><span class="py">opened_date</span><span class="p">,</span><span class="w"> </span><span class="py">CURRENT_DATE</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Interest</span><span class="w"> </span><span class="py">calculations</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">monthly_interest</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="py">balance</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">interest_rate</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">12</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">100</span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">annual_interest</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="py">balance</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">interest_rate</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">100</span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Transaction</span><span class="w"> </span><span class="py">metrics</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">total_transactions</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">HAS_TRANSACTION</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">t</span><span class="p">:</span><span class="nc">Transaction</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">total_deposits</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="py">COALESCE</span><span class="p">(</span><span class="py">SUM</span><span class="p">(</span><span class="py">amount</span><span class="p">),</span><span class="w"> </span><span class="py">0</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">HAS_TRANSACTION</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">t</span><span class="p">:</span><span class="nc">Transaction</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">t</span><span class="err">.</span><span class="kd">type</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">'</span><span class="nc">deposit</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">total_withdrawals</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="py">COALESCE</span><span class="p">(</span><span class="py">SUM</span><span class="p">(</span><span class="py">amount</span><span class="p">),</span><span class="w"> </span><span class="py">0</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">HAS_TRANSACTION</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">t</span><span class="p">:</span><span class="nc">Transaction</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">t</span><span class="err">.</span><span class="kd">type</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">'</span><span class="nc">withdrawal</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="healthcare-applications" class="position-relative d-flex align-items-center group">
<span>Healthcare Applications</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="healthcare-applications"
aria-haspopup="dialog"
aria-label="Share link: Healthcare Applications">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="py">CREATE</span><span class="w"> </span><span class="py">PROPERTY</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">Patient</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">first_name</span><span class="w"> </span><span class="py">STRING</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">last_name</span><span class="w"> </span><span class="py">STRING</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">date_of_birth</span><span class="w"> </span><span class="py">DATE</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">height_cm</span><span class="w"> </span><span class="py">DECIMAL</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">weight_kg</span><span class="w"> </span><span class="py">DECIMAL</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">blood_pressure_systolic</span><span class="w"> </span><span class="py">INTEGER</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">blood_pressure_diastolic</span><span class="w"> </span><span class="py">INTEGER</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Patient</span><span class="w"> </span><span class="py">identification</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">full_name</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="py">first_name</span><span class="w"> </span><span class="p">||</span><span class="w"> </span><span class="err">'</span><span class="w"> </span><span class="err">'</span><span class="w"> </span><span class="p">||</span><span class="w"> </span><span class="py">last_name</span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Age</span><span class="w"> </span><span class="py">and</span><span class="w"> </span><span class="py">demographics</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">age</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">DATEDIFF</span><span class="p">(</span><span class="py">YEAR</span><span class="p">,</span><span class="w"> </span><span class="py">date_of_birth</span><span class="p">,</span><span class="w"> </span><span class="py">CURRENT_DATE</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">age_category</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">CASE</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">age</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">2</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="err">'</span><span class="py">infant</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">age</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">13</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="err">'</span><span class="py">child</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">age</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">20</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="err">'</span><span class="py">adolescent</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">age</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">65</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="err">'</span><span class="py">adult</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ELSE</span><span class="w"> </span><span class="err">'</span><span class="py">senior</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">END</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Body</span><span class="w"> </span><span class="py">Mass</span><span class="w"> </span><span class="py">Index</span><span class="w"> </span><span class="p">(</span><span class="py">BMI</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">height_m</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="py">height_cm</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">100</span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">bmi</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">weight_kg</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="p">(</span><span class="py">height_m</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">height_m</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">bmi_category</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">CASE</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">bmi</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">18</span><span class="mf">.5</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="err">'</span><span class="py">underweight</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">bmi</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">25</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="err">'</span><span class="py">normal</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">bmi</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">30</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="err">'</span><span class="py">overweight</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ELSE</span><span class="w"> </span><span class="err">'</span><span class="py">obese</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">END</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Blood</span><span class="w"> </span><span class="py">pressure</span><span class="w"> </span><span class="py">category</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">bp_category</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">CASE</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">blood_pressure_systolic</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">120</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">blood_pressure_diastolic</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">80</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="err">'</span><span class="py">normal</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">blood_pressure_systolic</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">130</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">blood_pressure_diastolic</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">80</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="err">'</span><span class="py">elevated</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">blood_pressure_systolic</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">140</span><span class="w"> </span><span class="py">OR</span><span class="w"> </span><span class="py">blood_pressure_diastolic</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">90</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="err">'</span><span class="py">stage_1_hypertension</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ELSE</span><span class="w"> </span><span class="err">'</span><span class="py">stage_2_hypertension</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">END</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Health</span><span class="w"> </span><span class="py">indicators</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">has_risk_factors</span><span class="w"> </span><span class="py">BOOLEAN</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">bmi</span><span class="w"> </span><span class="err">></span><span class="p">=</span><span class="w"> </span><span class="py">30</span><span class="w"> </span><span class="py">OR</span><span class="w"> </span><span class="py">blood_pressure_systolic</span><span class="w"> </span><span class="err">></span><span class="p">=</span><span class="w"> </span><span class="py">130</span><span class="w"> </span><span class="py">OR</span><span class="w"> </span><span class="py">age</span><span class="w"> </span><span class="err">></span><span class="p">=</span><span class="w"> </span><span class="py">65</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Visit</span><span class="w"> </span><span class="py">metrics</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">total_visits</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">HAD_VISIT</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">v</span><span class="p">:</span><span class="nc">Visit</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">last_visit_days_ago</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="py">MIN</span><span class="p">(</span><span class="py">DATEDIFF</span><span class="p">(</span><span class="py">DAY</span><span class="p">,</span><span class="w"> </span><span class="py">v</span><span class="err">.</span><span class="py">date</span><span class="p">,</span><span class="w"> </span><span class="py">NOW</span><span class="p">()))</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">HAD_VISIT</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">v</span><span class="p">:</span><span class="nc">Visit</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">needs_checkup</span><span class="w"> </span><span class="py">BOOLEAN</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">last_visit_days_ago</span><span class="w"> </span><span class="py">IS</span><span class="w"> </span><span class="py">NULL</span><span class="w"> </span><span class="py">OR</span><span class="w"> </span><span class="py">last_visit_days_ago</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">365</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="advanced-computation-patterns" class="position-relative d-flex align-items-center group">
<span>Advanced Computation Patterns</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="advanced-computation-patterns"
aria-haspopup="dialog"
aria-label="Share link: Advanced Computation Patterns">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="multi-level-aggregations" class="position-relative d-flex align-items-center group">
<span>Multi-Level Aggregations</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="multi-level-aggregations"
aria-haspopup="dialog"
aria-label="Share link: Multi-Level Aggregations">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="py">CREATE</span><span class="w"> </span><span class="py">PROPERTY</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">Team</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">name</span><span class="w"> </span><span class="py">STRING</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">budget</span><span class="w"> </span><span class="py">DECIMAL</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Direct</span><span class="w"> </span><span class="py">metrics</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">member_count</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">HAS_MEMBER</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Project</span><span class="w"> </span><span class="py">metrics</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">active_projects</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">OWNS</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Project</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">status</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">'</span><span class="py">active</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Nested</span><span class="w"> </span><span class="py">aggregation</span><span class="p">:</span><span class="w"> </span><span class="nc">total</span><span class="w"> </span><span class="py">tasks</span><span class="w"> </span><span class="py">across</span><span class="w"> </span><span class="py">all</span><span class="w"> </span><span class="py">projects</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">total_tasks</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">OWNS</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Project</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">HAS_TASK</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">t</span><span class="p">:</span><span class="nc">Task</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Average</span><span class="w"> </span><span class="py">completion</span><span class="w"> </span><span class="py">rate</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">avg_completion_rate</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="py">AVG</span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">CAST</span><span class="p">(</span><span class="py">COUNT</span><span class="p">(</span><span class="py">completed_tasks</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">DECIMAL</span><span class="p">)</span><span class="w"> </span><span class="err">/</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">NULLIF</span><span class="p">(</span><span class="py">COUNT</span><span class="p">(</span><span class="py">all_tasks</span><span class="p">),</span><span class="w"> </span><span class="py">0</span><span class="p">)</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">100</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">OWNS</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Project</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">OPTIONAL</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">HAS_TASK</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">all_tasks</span><span class="p">:</span><span class="nc">Task</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">OPTIONAL</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">HAS_TASK</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">completed_tasks</span><span class="p">:</span><span class="nc">Task</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">completed_tasks</span><span class="err">.</span><span class="py">status</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">'</span><span class="py">completed</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Budget</span><span class="w"> </span><span class="py">utilization</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">total_spent</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="py">COALESCE</span><span class="p">(</span><span class="py">SUM</span><span class="p">(</span><span class="py">p</span><span class="err">.</span><span class="py">spent</span><span class="p">),</span><span class="w"> </span><span class="py">0</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">OWNS</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Project</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">budget_utilization</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">total_spent</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">NULLIF</span><span class="p">(</span><span class="py">budget</span><span class="p">,</span><span class="w"> </span><span class="py">0</span><span class="p">)</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">100</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">is_over_budget</span><span class="w"> </span><span class="py">BOOLEAN</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="py">budget_utilization</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">100</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="time-series-computations" class="position-relative d-flex align-items-center group">
<span>Time-Series Computations</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="time-series-computations"
aria-haspopup="dialog"
aria-label="Share link: Time-Series Computations">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="py">CREATE</span><span class="w"> </span><span class="py">PROPERTY</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">Sensor</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">id</span><span class="w"> </span><span class="py">STRING</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">location</span><span class="w"> </span><span class="py">STRING</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Latest</span><span class="w"> </span><span class="py">reading</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">latest_reading</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="py">r</span><span class="err">.</span><span class="py">value</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">RECORDED</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">r</span><span class="p">:</span><span class="nc">Reading</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">r</span><span class="err">.</span><span class="py">timestamp</span><span class="w"> </span><span class="py">DESC</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">LIMIT</span><span class="w"> </span><span class="py">1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Time</span><span class="err">-</span><span class="py">based</span><span class="w"> </span><span class="py">aggregations</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">readings_last_hour</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">RECORDED</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">r</span><span class="p">:</span><span class="nc">Reading</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">r</span><span class="err">.</span><span class="py">timestamp</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">NOW</span><span class="p">()</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">INTERVAL</span><span class="w"> </span><span class="err">'</span><span class="py">1</span><span class="w"> </span><span class="py">hour</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">avg_last_hour</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="py">AVG</span><span class="p">(</span><span class="py">r</span><span class="err">.</span><span class="py">value</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">RECORDED</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">r</span><span class="p">:</span><span class="nc">Reading</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">r</span><span class="err">.</span><span class="py">timestamp</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">NOW</span><span class="p">()</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">INTERVAL</span><span class="w"> </span><span class="err">'</span><span class="py">1</span><span class="w"> </span><span class="py">hour</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">max_last_24h</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="py">MAX</span><span class="p">(</span><span class="py">r</span><span class="err">.</span><span class="py">value</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">RECORDED</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">r</span><span class="p">:</span><span class="nc">Reading</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">r</span><span class="err">.</span><span class="py">timestamp</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">NOW</span><span class="p">()</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">INTERVAL</span><span class="w"> </span><span class="err">'</span><span class="py">24</span><span class="w"> </span><span class="py">hours</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">min_last_24h</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="py">MIN</span><span class="p">(</span><span class="py">r</span><span class="err">.</span><span class="py">value</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">RECORDED</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">r</span><span class="p">:</span><span class="nc">Reading</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">r</span><span class="err">.</span><span class="py">timestamp</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">NOW</span><span class="p">()</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">INTERVAL</span><span class="w"> </span><span class="err">'</span><span class="py">24</span><span class="w"> </span><span class="py">hours</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Trend</span><span class="w"> </span><span class="py">detection</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">trend</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">CASE</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">avg_last_hour</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">max_last_24h</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">0</span><span class="mf">.9</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="err">'</span><span class="py">rising</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">avg_last_hour</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">min_last_24h</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">1</span><span class="mf">.1</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="err">'</span><span class="py">falling</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ELSE</span><span class="w"> </span><span class="err">'</span><span class="py">stable</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">END</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Alert</span><span class="w"> </span><span class="py">conditions</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">is_anomalous</span><span class="w"> </span><span class="py">BOOLEAN</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">latest_reading</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">avg_last_hour</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">2</span><span class="w"> </span><span class="py">OR</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">latest_reading</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">avg_last_hour</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="py">0</span><span class="mf">.5</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="graph-topology-computations" class="position-relative d-flex align-items-center group">
<span>Graph Topology Computations</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="graph-topology-computations"
aria-haspopup="dialog"
aria-label="Share link: Graph Topology Computations">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="py">CREATE</span><span class="w"> </span><span class="py">PROPERTY</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">Node</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">id</span><span class="w"> </span><span class="py">STRING</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">name</span><span class="w"> </span><span class="py">STRING</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Degree</span><span class="w"> </span><span class="py">computations</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">out_degree</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="err">-</span><span class="p">[]</span><span class="err">-></span><span class="p">(</span><span class="py">n</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">in_degree</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="err"><-</span><span class="p">[]</span><span class="err">-</span><span class="p">(</span><span class="py">n</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">total_degree</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="py">out_degree</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">in_degree</span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Neighborhood</span><span class="w"> </span><span class="py">metrics</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">neighbors</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="py">DISTINCT</span><span class="w"> </span><span class="py">n</span><span class="p">)</span><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="err">-</span><span class="p">[]</span><span class="err">-</span><span class="p">(</span><span class="py">n</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">second_order_neighbors</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="py">DISTINCT</span><span class="w"> </span><span class="py">n2</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="err">-</span><span class="p">[]</span><span class="err">-</span><span class="p">(</span><span class="py">n1</span><span class="p">)</span><span class="err">-</span><span class="p">[]</span><span class="err">-</span><span class="p">(</span><span class="py">n2</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">n2</span><span class="w"> </span><span class="err"><></span><span class="w"> </span><span class="py">this</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Centrality</span><span class="w"> </span><span class="py">indicators</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">is_hub</span><span class="w"> </span><span class="py">BOOLEAN</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="py">out_degree</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">10</span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">is_authority</span><span class="w"> </span><span class="py">BOOLEAN</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="py">in_degree</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">10</span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">is_bridge</span><span class="w"> </span><span class="py">BOOLEAN</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">total_degree</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">2</span><span class="w"> </span><span class="py">AND</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">out_degree</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">1</span><span class="w"> </span><span class="py">AND</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">in_degree</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Clustering</span><span class="w"> </span><span class="py">metrics</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">triangle_count</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="err">-</span><span class="p">[]</span><span class="err">-</span><span class="p">(</span><span class="py">n1</span><span class="p">)</span><span class="err">-</span><span class="p">[]</span><span class="err">-</span><span class="p">(</span><span class="py">n2</span><span class="p">)</span><span class="err">-</span><span class="p">[]</span><span class="err">-</span><span class="p">(</span><span class="py">this</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">n1</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">n2</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Avoid</span><span class="w"> </span><span class="py">counting</span><span class="w"> </span><span class="py">same</span><span class="w"> </span><span class="py">triangle</span><span class="w"> </span><span class="py">multiple</span><span class="w"> </span><span class="py">times</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">clustering_coefficient</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">CASE</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHEN</span><span class="w"> </span><span class="py">neighbors</span><span class="w"> </span><span class="err"><</span><span class="p">=</span><span class="w"> </span><span class="py">1</span><span class="w"> </span><span class="py">THEN</span><span class="w"> </span><span class="py">0</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ELSE</span><span class="w"> </span><span class="py">CAST</span><span class="p">(</span><span class="py">triangle_count</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">DECIMAL</span><span class="p">)</span><span class="w"> </span><span class="err">/</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">(</span><span class="py">neighbors</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="p">(</span><span class="py">neighbors</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">1</span><span class="p">)</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">2</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">END</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="performance-optimization-strategies" class="position-relative d-flex align-items-center group">
<span>Performance Optimization Strategies</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="performance-optimization-strategies"
aria-haspopup="dialog"
aria-label="Share link: Performance Optimization Strategies">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="indexing-computed-properties" class="position-relative d-flex align-items-center group">
<span>Indexing Computed Properties</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="indexing-computed-properties"
aria-haspopup="dialog"
aria-label="Share link: Indexing Computed Properties">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Index</span><span class="w"> </span><span class="py">frequently</span><span class="w"> </span><span class="py">queried</span><span class="w"> </span><span class="py">computed</span><span class="w"> </span><span class="py">properties</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">idx_user_age</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">User</span><span class="p">(</span><span class="py">age</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">idx_user_tier</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">User</span><span class="p">(</span><span class="py">user_tier</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">idx_account_health</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">Account</span><span class="p">(</span><span class="py">health_score</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">idx_product_profitable</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">Product</span><span class="p">(</span><span class="py">is_profitable</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Composite</span><span class="w"> </span><span class="py">indexes</span><span class="w"> </span><span class="kd">on</span><span class="w"> </span><span class="py">computed</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">stored</span><span class="w"> </span><span class="py">properties</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">idx_user_age_country</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">User</span><span class="p">(</span><span class="py">age</span><span class="p">,</span><span class="w"> </span><span class="py">country</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">idx_order_recent_total</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">Order</span><span class="p">(</span><span class="py">is_recent</span><span class="p">,</span><span class="w"> </span><span class="py">total</span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="caching-computed-values" class="position-relative d-flex align-items-center group">
<span>Caching Computed Values</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="caching-computed-values"
aria-haspopup="dialog"
aria-label="Share link: Caching Computed Values">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">For</span><span class="w"> </span><span class="py">expensive</span><span class="w"> </span><span class="py">computations</span><span class="p">,</span><span class="w"> </span><span class="py">consider</span><span class="w"> </span><span class="py">materializing</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">MATERIALIZED</span><span class="w"> </span><span class="py">VIEW</span><span class="w"> </span><span class="py">user_engagement_cache</span><span class="w"> </span><span class="py">AS</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SELECT</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">id</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">full_name</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">follower_count</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">engagement_score</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">user_tier</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">FROM</span><span class="w"> </span><span class="py">User</span><span class="w"> </span><span class="py">u</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">REFRESH</span><span class="w"> </span><span class="py">SCHEDULE</span><span class="w"> </span><span class="err">'</span><span class="py">0</span><span class="w"> </span><span class="err">*/</span><span class="py">6</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="err">*</span><span class="w"> </span><span class="err">*';</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Refresh</span><span class="w"> </span><span class="py">every</span><span class="w"> </span><span class="py">6</span><span class="w"> </span><span class="py">hours</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="optimizing-aggregation-queries" class="position-relative d-flex align-items-center group">
<span>Optimizing Aggregation Queries</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="optimizing-aggregation-queries"
aria-haspopup="dialog"
aria-label="Share link: Optimizing Aggregation Queries">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Avoid</span><span class="w"> </span><span class="py">deep</span><span class="w"> </span><span class="py">nested</span><span class="w"> </span><span class="py">aggregations</span><span class="w"> </span><span class="py">in</span><span class="w"> </span><span class="py">computed</span><span class="w"> </span><span class="py">properties</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Instead</span><span class="p">,</span><span class="w"> </span><span class="py">use</span><span class="w"> </span><span class="py">incremental</span><span class="w"> </span><span class="py">counters</span><span class="w"> </span><span class="py">updated</span><span class="w"> </span><span class="py">via</span><span class="w"> </span><span class="py">triggers</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">PROPERTY</span><span class="w"> </span><span class="py">TYPE</span><span class="w"> </span><span class="py">Team</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">name</span><span class="w"> </span><span class="py">STRING</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">member_count_cache</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">0</span><span class="p">,</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Cached</span><span class="w"> </span><span class="py">value</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Trigger</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">update</span><span class="w"> </span><span class="py">cache</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AFTER</span><span class="w"> </span><span class="py">INSERT</span><span class="w"> </span><span class="py">RELATIONSHIP</span><span class="w"> </span><span class="p">[:</span><span class="nc">HAS_MEMBER</span><span class="p">]</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">UPDATE</span><span class="w"> </span><span class="py">this</span><span class="w"> </span><span class="py">SET</span><span class="w"> </span><span class="py">member_count_cache</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">member_count_cache</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AFTER</span><span class="w"> </span><span class="py">DELETE</span><span class="w"> </span><span class="py">RELATIONSHIP</span><span class="w"> </span><span class="p">[:</span><span class="nc">HAS_MEMBER</span><span class="p">]</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">UPDATE</span><span class="w"> </span><span class="py">this</span><span class="w"> </span><span class="py">SET</span><span class="w"> </span><span class="py">member_count_cache</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">member_count_cache</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="best-practices" class="position-relative d-flex align-items-center group">
<span>Best Practices</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="best-practices"
aria-haspopup="dialog"
aria-label="Share link: Best Practices">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="design-guidelines" class="position-relative d-flex align-items-center group">
<span>Design Guidelines</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="design-guidelines"
aria-haspopup="dialog"
aria-label="Share link: Design Guidelines">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><ol>
<li>
<p><strong>Keep Formulas Simple</strong>: Complex calculations impact query performance</p>
<ul>
<li>Prefer simple arithmetic over nested subqueries</li>
<li>Limit relationship traversal depth to 1-2 hops</li>
<li>Use materialized views for complex aggregations</li>
</ul>
</li>
<li>
<p><strong>Document Complex Calculations</strong>: Add comments explaining business logic</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Customer</span><span class="w"> </span><span class="py">lifetime</span><span class="w"> </span><span class="py">value</span><span class="p">:</span><span class="w"> </span><span class="nc">total</span><span class="w"> </span><span class="py">purchases</span><span class="w"> </span><span class="py">adjusted</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">returns</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">and</span><span class="w"> </span><span class="py">weighted</span><span class="w"> </span><span class="py">by</span><span class="w"> </span><span class="py">recency</span><span class="w"> </span><span class="p">(</span><span class="py">last</span><span class="w"> </span><span class="py">90</span><span class="w"> </span><span class="py">days</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">1</span><span class="mf">.5</span><span class="py">x</span><span class="w"> </span><span class="py">multiplier</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">lifetime_value</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="kd">...</span><span class="p">)</span><span class="w">
</span></span></span></code></pre></div></li>
<li>
<p><strong>Choose Appropriate Data Types</strong>: Match types to computation results</p>
<ul>
<li>Use DECIMAL for financial calculations</li>
<li>Use INTEGER for counts and IDs</li>
<li>Use BOOLEAN for flags and conditions</li>
</ul>
</li>
<li>
<p><strong>Consider Materialization</strong>: Cache expensive computations</p>
<ul>
<li>If computed property takes >100ms to calculate</li>
<li>If queried frequently (>1000 times/day)</li>
<li>If result changes infrequently</li>
</ul>
</li>
<li>
<p><strong>Use Defensive Programming</strong>: Handle NULL and edge cases</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="py">safe_ratio</span><span class="w"> </span><span class="py">DECIMAL</span><span class="w"> </span><span class="py">COMPUTED</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">CAST</span><span class="p">(</span><span class="py">numerator</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">DECIMAL</span><span class="p">)</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="py">NULLIF</span><span class="p">(</span><span class="py">denominator</span><span class="p">,</span><span class="w"> </span><span class="py">0</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="w">
</span></span></span></code></pre></div></li>
</ol>
<h4 id="testing-guidelines" class="position-relative d-flex align-items-center group">
<span>Testing Guidelines</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="testing-guidelines"
aria-haspopup="dialog"
aria-label="Share link: Testing Guidelines">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><ol>
<li><strong>Unit Test Formulas</strong>: Verify calculations with known inputs</li>
<li><strong>Test Edge Cases</strong>: NULL values, zero division, negative numbers</li>
<li><strong>Performance Test</strong>: Benchmark with realistic data volumes</li>
<li><strong>Validate Types</strong>: Ensure computed types match declarations</li>
<li><strong>Test Index Usage</strong>: Verify indexes on computed properties work</li>
</ol>
<h4 id="monitoring-and-maintenance" class="position-relative d-flex align-items-center group">
<span>Monitoring and Maintenance</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="monitoring-and-maintenance"
aria-haspopup="dialog"
aria-label="Share link: Monitoring and Maintenance">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Query</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">identify</span><span class="w"> </span><span class="py">slow</span><span class="w"> </span><span class="py">computed</span><span class="w"> </span><span class="py">properties</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SELECT</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">property_name</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">avg_computation_time_ms</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">call_count</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">total_time_ms</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">FROM</span><span class="w"> </span><span class="py">system</span><span class="err">.</span><span class="py">computed_property_stats</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">avg_computation_time_ms</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">50</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">total_time_ms</span><span class="w"> </span><span class="py">DESC</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LIMIT</span><span class="w"> </span><span class="py">20</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="common-pitfalls-to-avoid" class="position-relative d-flex align-items-center group">
<span>Common Pitfalls to Avoid</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="common-pitfalls-to-avoid"
aria-haspopup="dialog"
aria-label="Share link: Common Pitfalls to Avoid">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><ol>
<li><strong>Circular Dependencies</strong>: Don’t reference computed properties that depend on each other</li>
<li><strong>Deep Relationship Traversal</strong>: Limit MATCH depth in computed properties</li>
<li><strong>Missing NULL Handling</strong>: Always handle potential NULL values</li>
<li><strong>Type Mismatches</strong>: Ensure expression types match property types</li>
<li><strong>Expensive Aggregations</strong>: Avoid COUNT(*) on large relationship sets</li>
</ol>
<h3 id="related-topics" class="position-relative d-flex align-items-center group">
<span>Related Topics</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="related-topics"
aria-haspopup="dialog"
aria-label="Share link: Related Topics">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><ul>
<li><a
href="/tags/virtual-properties/"
>Virtual Properties</a>
- On-demand non-stored calculations</li>
<li><a
href="/tags/materialized-views/"
>Materialized Views</a>
- Cached pre-computed results</li>
<li><a
href="/tags/indexes/"
>Indexes</a>
- Indexing strategies for computed properties</li>
<li><a
href="/tags/types/"
>Types</a>
- Property type definitions</li>
<li><a
href="/tags/aggregation/"
>Aggregation</a>
- Aggregation functions and patterns</li>
<li><a
href="/tags/performance/"
>Performance</a>
- Query optimization techniques</li>
</ul>
<h3 id="further-reading" class="position-relative d-flex align-items-center group">
<span>Further Reading</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="further-reading"
aria-haspopup="dialog"
aria-label="Share link: Further Reading">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><ul>
<li><a
href="https://www.iso.org/standard/76120.html"
aria-label="ISO/IEC 39075:2024 GQL Standard – opens in new window"
target="_blank" rel="noopener noreferrer"
>ISO/IEC 39075:2024 GQL Standard
<span aria-hidden="true" class="external-icon">↗</span>
</a>
- Official GQL specification</li>
<li><a
href="https://docs.microsoft.com/en-us/sql/relational-databases/tables/specify-computed-columns-in-a-table"
aria-label="Computed Columns in SQL – opens in new window"
target="_blank" rel="noopener noreferrer"
>Computed Columns in SQL
<span aria-hidden="true" class="external-icon">↗</span>
</a>
- SQL Server reference</li>
<li><a
href="https://www.postgresql.org/docs/current/ddl-generated-columns.html"
aria-label="Generated Columns (PostgreSQL) – opens in new window"
target="_blank" rel="noopener noreferrer"
>Generated Columns (PostgreSQL)
<span aria-hidden="true" class="external-icon">↗</span>
</a>
- PostgreSQL documentation</li>
<li><a
href="https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-coalesce"
aria-label="Derived Attributes – opens in new window"
target="_blank" rel="noopener noreferrer"
>Derived Attributes
<span aria-hidden="true" class="external-icon">↗</span>
</a>
- Graph database patterns</li>
</ul>
Related Articles
No articles found with this tag yet.
Back to Home