[{"data":1,"prerenderedAt":3083},["ShallowReactive",2],{"navigation_docs_en":3,"-en-tauri-sqlite-orm-advanced-topics-subqueries-and-aggregates":237,"-en-tauri-sqlite-orm-advanced-topics-subqueries-and-aggregates-surround":3078},[4,15,69,122],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":14},"Getting Started with Docs","i-lucide-home","/en/getting-started","en/1.getting-started",[10],{"title":11,"path":12,"stem":13,"icon":6},"Introduction","/en/getting-started/introduction","en/1.getting-started/1.introduction",false,{"title":16,"path":17,"stem":18,"children":19,"page":14},"owo-ui Components","/en/owo-ui-components","en/2.owo-ui-components",[20,23],{"title":11,"path":21,"stem":22,"icon":6},"/en/owo-ui-components/introduction","en/2.owo-ui-components/2.introduction",{"title":24,"icon":25,"path":26,"stem":27,"children":28,"page":14},"Components","i-lucide-layout","/en/owo-ui-components/components","en/2.owo-ui-components/3.components",[29,33,37,41,45,49,53,57,61,65],{"title":30,"path":31,"stem":32},"Button","/en/owo-ui-components/components/button","en/2.owo-ui-components/3.components/button",{"title":34,"path":35,"stem":36},"Checkbox","/en/owo-ui-components/components/checkbox","en/2.owo-ui-components/3.components/checkbox",{"title":38,"path":39,"stem":40},"Collapsible Container","/en/owo-ui-components/components/collapsible-container","en/2.owo-ui-components/3.components/collapsible-container",{"title":42,"path":43,"stem":44},"Dropdown","/en/owo-ui-components/components/dropdown","en/2.owo-ui-components/3.components/dropdown",{"title":46,"path":47,"stem":48},"Flow Layout","/en/owo-ui-components/components/flow-layout","en/2.owo-ui-components/3.components/flow-layout",{"title":50,"path":51,"stem":52},"Grid Layout","/en/owo-ui-components/components/grid-layout","en/2.owo-ui-components/3.components/grid-layout",{"title":54,"path":55,"stem":56},"Label","/en/owo-ui-components/components/label","en/2.owo-ui-components/3.components/label",{"title":58,"path":59,"stem":60},"Scroll Container","/en/owo-ui-components/components/scroll-container","en/2.owo-ui-components/3.components/scroll-container",{"title":62,"path":63,"stem":64},"Slider","/en/owo-ui-components/components/slider","en/2.owo-ui-components/3.components/slider",{"title":66,"path":67,"stem":68},"Templates","/en/owo-ui-components/components/templates","en/2.owo-ui-components/3.components/templates",{"title":70,"path":71,"stem":72,"children":73,"page":14},"Nexus","/en/nexus","en/3.nexus",[74,77,82],{"title":11,"path":75,"stem":76,"icon":6},"/en/nexus/introduction","en/3.nexus/2.introduction",{"title":78,"path":79,"stem":80,"icon":81},"Deployment","/en/nexus/deployment","en/3.nexus/3.deployment","i-lucide-rocket",{"title":83,"path":84,"stem":85,"children":86,"page":14},"Endpoints","/en/nexus/endpoints","en/3.nexus/endpoints",[87,91,95,99,102,106,110,114,118],{"title":88,"path":89,"stem":90},"Authentication","/en/nexus/endpoints/authentication","en/3.nexus/endpoints/1.authentication",{"title":92,"path":93,"stem":94},"Rate Limiting","/en/nexus/endpoints/rate-limiting","en/3.nexus/endpoints/2.rate-limiting",{"title":96,"path":97,"stem":98},"Error Handling","/en/nexus/endpoints/error-handling","en/3.nexus/endpoints/3.error-handling",{"title":83,"path":100,"stem":101},"/en/nexus/endpoints/_dir","en/3.nexus/endpoints/_dir",{"title":103,"path":104,"stem":105},"Album","/en/nexus/endpoints/albums","en/3.nexus/endpoints/albums",{"title":107,"path":108,"stem":109},"Blog","/en/nexus/endpoints/blog","en/3.nexus/endpoints/blog",{"title":111,"path":112,"stem":113},"Comments","/en/nexus/endpoints/comments","en/3.nexus/endpoints/comments",{"title":115,"path":116,"stem":117},"File Management","/en/nexus/endpoints/file-management","en/3.nexus/endpoints/file-management",{"title":119,"path":120,"stem":121},"Photo Management","/en/nexus/endpoints/photos","en/3.nexus/endpoints/photos",{"title":123,"icon":124,"path":125,"stem":126,"children":127,"page":14},"Tauri SQLite ORM","i-lucide-database","/en/tauri-sqlite-orm","en/4.tauri-sqlite-orm",[128,132,137,141,162,187,232],{"title":11,"path":129,"stem":130,"icon":131},"/en/tauri-sqlite-orm/introduction","en/4.tauri-sqlite-orm/1.introduction","i-lucide-book-open",{"title":133,"path":134,"stem":135,"icon":136},"Installation & Setup","/en/tauri-sqlite-orm/installation-and-setup","en/4.tauri-sqlite-orm/2.installation-and-setup","i-lucide-download",{"title":138,"path":139,"stem":140,"icon":81},"Your First Schema & Query","/en/tauri-sqlite-orm/your-first-schema-and-query","en/4.tauri-sqlite-orm/3.your-first-schema-and-query",{"title":142,"path":143,"stem":144,"children":145,"page":14},"Core Concepts","/en/tauri-sqlite-orm/core-concepts","en/4.tauri-sqlite-orm/4.core-concepts",[146,150,154,158],{"title":147,"path":148,"stem":149},"Defining Schemas","/en/tauri-sqlite-orm/core-concepts/defining-schemas","en/4.tauri-sqlite-orm/4.core-concepts/1.defining-schemas",{"title":151,"path":152,"stem":153},"Column Types & Modifiers","/en/tauri-sqlite-orm/core-concepts/column-types-and-modifiers","en/4.tauri-sqlite-orm/4.core-concepts/2.column-types-and-modifiers",{"title":155,"path":156,"stem":157},"The ORM Instance","/en/tauri-sqlite-orm/core-concepts/the-orm-instance","en/4.tauri-sqlite-orm/4.core-concepts/3.the-orm-instance",{"title":159,"path":160,"stem":161},"Migrations","/en/tauri-sqlite-orm/core-concepts/migrations","en/4.tauri-sqlite-orm/4.core-concepts/4.migrations",{"title":163,"path":164,"stem":165,"children":166,"page":14},"Querying Data","/en/tauri-sqlite-orm/querying-data","en/4.tauri-sqlite-orm/5.querying-data",[167,171,175,179,183],{"title":168,"path":169,"stem":170},"Select","/en/tauri-sqlite-orm/querying-data/selecting-data","en/4.tauri-sqlite-orm/5.querying-data/1.selecting-data",{"title":172,"path":173,"stem":174},"Insert","/en/tauri-sqlite-orm/querying-data/inserting-data","en/4.tauri-sqlite-orm/5.querying-data/2.inserting-data",{"title":176,"path":177,"stem":178},"Update","/en/tauri-sqlite-orm/querying-data/updating-data","en/4.tauri-sqlite-orm/5.querying-data/3.updating-data",{"title":180,"path":181,"stem":182},"Delete","/en/tauri-sqlite-orm/querying-data/deleting-data","en/4.tauri-sqlite-orm/5.querying-data/4.deleting-data",{"title":184,"path":185,"stem":186},"Conditions & Operators","/en/tauri-sqlite-orm/querying-data/conditions-and-operators","en/4.tauri-sqlite-orm/5.querying-data/5.conditions-and-operators",{"title":188,"path":189,"stem":190,"children":191,"page":14},"Advanced Topics","/en/tauri-sqlite-orm/advanced-topics","en/4.tauri-sqlite-orm/6.advanced-topics",[192,196,200,204,208,212,216,220,224,228],{"title":193,"path":194,"stem":195},"Relations","/en/tauri-sqlite-orm/advanced-topics/working-with-relations","en/4.tauri-sqlite-orm/6.advanced-topics/1.working-with-relations",{"title":197,"path":198,"stem":199},"Error Handling & Safety","/en/tauri-sqlite-orm/advanced-topics/error-handling-and-safety","en/4.tauri-sqlite-orm/6.advanced-topics/10.error-handling-and-safety",{"title":201,"path":202,"stem":203},"Joins","/en/tauri-sqlite-orm/advanced-topics/joins","en/4.tauri-sqlite-orm/6.advanced-topics/2.joins",{"title":205,"path":206,"stem":207},"Transactions","/en/tauri-sqlite-orm/advanced-topics/transactions","en/4.tauri-sqlite-orm/6.advanced-topics/3.transactions",{"title":209,"path":210,"stem":211},"Common Table Expressions","/en/tauri-sqlite-orm/advanced-topics/common-table-expressions","en/4.tauri-sqlite-orm/6.advanced-topics/4.common-table-expressions",{"title":213,"path":214,"stem":215},"Raw SQL","/en/tauri-sqlite-orm/advanced-topics/raw-sql","en/4.tauri-sqlite-orm/6.advanced-topics/5.raw-sql",{"title":217,"path":218,"stem":219},"Type Safety & Inference","/en/tauri-sqlite-orm/advanced-topics/type-safety-and-inference","en/4.tauri-sqlite-orm/6.advanced-topics/6.type-safety-and-inference",{"title":221,"path":222,"stem":223},"Schema Management","/en/tauri-sqlite-orm/advanced-topics/manual-schema-management","en/4.tauri-sqlite-orm/6.advanced-topics/7.manual-schema-management",{"title":225,"path":226,"stem":227},"Query Debugging","/en/tauri-sqlite-orm/advanced-topics/query-debugging","en/4.tauri-sqlite-orm/6.advanced-topics/8.query-debugging",{"title":229,"path":230,"stem":231},"Subqueries & Aggregates","/en/tauri-sqlite-orm/advanced-topics/subqueries-and-aggregates","en/4.tauri-sqlite-orm/6.advanced-topics/9.subqueries-and-aggregates",{"title":233,"path":234,"stem":235,"icon":236},"API Reference","/en/tauri-sqlite-orm/api-reference","en/4.tauri-sqlite-orm/7.api-reference","i-lucide-book",{"id":238,"title":229,"body":239,"description":3072,"extension":3073,"links":3074,"meta":3075,"navigation":348,"path":230,"seo":3076,"stem":231,"__hash__":3077},"docs_en/en/4.tauri-sqlite-orm/6.advanced-topics/9.subqueries-and-aggregates.md",{"type":240,"value":241,"toc":3053},"minimark",[242,246,251,254,259,595,599,763,767,921,925,1303,1307,1586,1590,1593,1597,1686,1690,1693,1802,1806,2043,2047,2123,2127,2573,2577,2619,2623,2820,2824,3046,3049],[243,244,245],"p",{},"This guide covers advanced query patterns using subqueries and aggregate functions.",[247,248,250],"h2",{"id":249},"subqueries","Subqueries",[243,252,253],{},"Subqueries allow you to use the result of one query within another query. They're powerful for complex filtering and comparisons.",[255,256,258],"h3",{"id":257},"creating-subqueries","Creating Subqueries",[260,261,266],"pre",{"className":262,"code":263,"language":264,"meta":265,"style":265},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { subquery, scalarSubquery } from '@type32/tauri-sqlite-orm';\nimport { eq, inArray, exists } from '@type32/tauri-sqlite-orm';\n\nconst users = sqliteTable('users', {\n  id: integer('id').primaryKey().autoincrement(),\n  name: text('name').notNull(),\n  departmentId: integer('department_id').notNull(),\n});\n\nconst departments = sqliteTable('departments', {\n  id: integer('id').primaryKey().autoincrement(),\n  name: text('name').notNull(),\n});\n","ts","",[267,268,269,311,343,350,382,426,457,486,496,501,526,559,586],"code",{"__ignoreMap":265},[270,271,274,278,282,286,289,292,295,298,301,305,308],"span",{"class":272,"line":273},"line",1,[270,275,277],{"class":276},"s7zQu","import",[270,279,281],{"class":280},"sMK4o"," {",[270,283,285],{"class":284},"sTEyZ"," subquery",[270,287,288],{"class":280},",",[270,290,291],{"class":284}," scalarSubquery",[270,293,294],{"class":280}," }",[270,296,297],{"class":276}," from",[270,299,300],{"class":280}," '",[270,302,304],{"class":303},"sfazB","@type32/tauri-sqlite-orm",[270,306,307],{"class":280},"'",[270,309,310],{"class":280},";\n",[270,312,314,316,318,321,323,326,328,331,333,335,337,339,341],{"class":272,"line":313},2,[270,315,277],{"class":276},[270,317,281],{"class":280},[270,319,320],{"class":284}," eq",[270,322,288],{"class":280},[270,324,325],{"class":284}," inArray",[270,327,288],{"class":280},[270,329,330],{"class":284}," exists",[270,332,294],{"class":280},[270,334,297],{"class":276},[270,336,300],{"class":280},[270,338,304],{"class":303},[270,340,307],{"class":280},[270,342,310],{"class":280},[270,344,346],{"class":272,"line":345},3,[270,347,349],{"emptyLinePlaceholder":348},true,"\n",[270,351,353,357,360,363,367,370,372,375,377,379],{"class":272,"line":352},4,[270,354,356],{"class":355},"spNyl","const",[270,358,359],{"class":284}," users ",[270,361,362],{"class":280},"=",[270,364,366],{"class":365},"s2Zo4"," sqliteTable",[270,368,369],{"class":284},"(",[270,371,307],{"class":280},[270,373,374],{"class":303},"users",[270,376,307],{"class":280},[270,378,288],{"class":280},[270,380,381],{"class":280}," {\n",[270,383,385,389,392,395,397,399,402,404,407,410,413,416,418,421,423],{"class":272,"line":384},5,[270,386,388],{"class":387},"swJcz","  id",[270,390,391],{"class":280},":",[270,393,394],{"class":365}," integer",[270,396,369],{"class":284},[270,398,307],{"class":280},[270,400,401],{"class":303},"id",[270,403,307],{"class":280},[270,405,406],{"class":284},")",[270,408,409],{"class":280},".",[270,411,412],{"class":365},"primaryKey",[270,414,415],{"class":284},"()",[270,417,409],{"class":280},[270,419,420],{"class":365},"autoincrement",[270,422,415],{"class":284},[270,424,425],{"class":280},",\n",[270,427,429,432,434,437,439,441,444,446,448,450,453,455],{"class":272,"line":428},6,[270,430,431],{"class":387},"  name",[270,433,391],{"class":280},[270,435,436],{"class":365}," text",[270,438,369],{"class":284},[270,440,307],{"class":280},[270,442,443],{"class":303},"name",[270,445,307],{"class":280},[270,447,406],{"class":284},[270,449,409],{"class":280},[270,451,452],{"class":365},"notNull",[270,454,415],{"class":284},[270,456,425],{"class":280},[270,458,460,463,465,467,469,471,474,476,478,480,482,484],{"class":272,"line":459},7,[270,461,462],{"class":387},"  departmentId",[270,464,391],{"class":280},[270,466,394],{"class":365},[270,468,369],{"class":284},[270,470,307],{"class":280},[270,472,473],{"class":303},"department_id",[270,475,307],{"class":280},[270,477,406],{"class":284},[270,479,409],{"class":280},[270,481,452],{"class":365},[270,483,415],{"class":284},[270,485,425],{"class":280},[270,487,489,492,494],{"class":272,"line":488},8,[270,490,491],{"class":280},"}",[270,493,406],{"class":284},[270,495,310],{"class":280},[270,497,499],{"class":272,"line":498},9,[270,500,349],{"emptyLinePlaceholder":348},[270,502,504,506,509,511,513,515,517,520,522,524],{"class":272,"line":503},10,[270,505,356],{"class":355},[270,507,508],{"class":284}," departments ",[270,510,362],{"class":280},[270,512,366],{"class":365},[270,514,369],{"class":284},[270,516,307],{"class":280},[270,518,519],{"class":303},"departments",[270,521,307],{"class":280},[270,523,288],{"class":280},[270,525,381],{"class":280},[270,527,529,531,533,535,537,539,541,543,545,547,549,551,553,555,557],{"class":272,"line":528},11,[270,530,388],{"class":387},[270,532,391],{"class":280},[270,534,394],{"class":365},[270,536,369],{"class":284},[270,538,307],{"class":280},[270,540,401],{"class":303},[270,542,307],{"class":280},[270,544,406],{"class":284},[270,546,409],{"class":280},[270,548,412],{"class":365},[270,550,415],{"class":284},[270,552,409],{"class":280},[270,554,420],{"class":365},[270,556,415],{"class":284},[270,558,425],{"class":280},[270,560,562,564,566,568,570,572,574,576,578,580,582,584],{"class":272,"line":561},12,[270,563,431],{"class":387},[270,565,391],{"class":280},[270,567,436],{"class":365},[270,569,369],{"class":284},[270,571,307],{"class":280},[270,573,443],{"class":303},[270,575,307],{"class":280},[270,577,406],{"class":284},[270,579,409],{"class":280},[270,581,452],{"class":365},[270,583,415],{"class":284},[270,585,425],{"class":280},[270,587,589,591,593],{"class":272,"line":588},13,[270,590,491],{"class":280},[270,592,406],{"class":284},[270,594,310],{"class":280},[255,596,598],{"id":597},"subquery-in-in-clause","Subquery in IN Clause",[260,600,602],{"className":262,"code":601,"language":264,"meta":265,"style":265},"// Find all users in the 'Engineering' department\nconst engineeringQuery = db.select(departments)\n  .where(eq(departments._.columns.name, 'Engineering'));\n\nconst engineeringUsers = await db.select(users)\n  .where(inArray(users._.columns.departmentId, subquery(engineeringQuery)))\n  .all();\n\n// Generated SQL (simplified):\n// SELECT * FROM users \n// WHERE department_id IN (SELECT id FROM departments WHERE name = 'Engineering')\n",[267,603,604,610,630,674,678,699,733,744,748,753,758],{"__ignoreMap":265},[270,605,606],{"class":272,"line":273},[270,607,609],{"class":608},"sHwdD","// Find all users in the 'Engineering' department\n",[270,611,612,614,617,619,622,624,627],{"class":272,"line":313},[270,613,356],{"class":355},[270,615,616],{"class":284}," engineeringQuery ",[270,618,362],{"class":280},[270,620,621],{"class":284}," db",[270,623,409],{"class":280},[270,625,626],{"class":365},"select",[270,628,629],{"class":284},"(departments)\n",[270,631,632,635,638,640,643,646,648,651,653,656,658,660,662,664,667,669,672],{"class":272,"line":345},[270,633,634],{"class":280},"  .",[270,636,637],{"class":365},"where",[270,639,369],{"class":284},[270,641,642],{"class":365},"eq",[270,644,645],{"class":284},"(departments",[270,647,409],{"class":280},[270,649,650],{"class":284},"_",[270,652,409],{"class":280},[270,654,655],{"class":284},"columns",[270,657,409],{"class":280},[270,659,443],{"class":284},[270,661,288],{"class":280},[270,663,300],{"class":280},[270,665,666],{"class":303},"Engineering",[270,668,307],{"class":280},[270,670,671],{"class":284},"))",[270,673,310],{"class":280},[270,675,676],{"class":272,"line":352},[270,677,349],{"emptyLinePlaceholder":348},[270,679,680,682,685,687,690,692,694,696],{"class":272,"line":384},[270,681,356],{"class":355},[270,683,684],{"class":284}," engineeringUsers ",[270,686,362],{"class":280},[270,688,689],{"class":276}," await",[270,691,621],{"class":284},[270,693,409],{"class":280},[270,695,626],{"class":365},[270,697,698],{"class":284},"(users)\n",[270,700,701,703,705,707,710,713,715,717,719,721,723,726,728,730],{"class":272,"line":428},[270,702,634],{"class":280},[270,704,637],{"class":365},[270,706,369],{"class":284},[270,708,709],{"class":365},"inArray",[270,711,712],{"class":284},"(users",[270,714,409],{"class":280},[270,716,650],{"class":284},[270,718,409],{"class":280},[270,720,655],{"class":284},[270,722,409],{"class":280},[270,724,725],{"class":284},"departmentId",[270,727,288],{"class":280},[270,729,285],{"class":365},[270,731,732],{"class":284},"(engineeringQuery)))\n",[270,734,735,737,740,742],{"class":272,"line":459},[270,736,634],{"class":280},[270,738,739],{"class":365},"all",[270,741,415],{"class":284},[270,743,310],{"class":280},[270,745,746],{"class":272,"line":488},[270,747,349],{"emptyLinePlaceholder":348},[270,749,750],{"class":272,"line":498},[270,751,752],{"class":608},"// Generated SQL (simplified):\n",[270,754,755],{"class":272,"line":503},[270,756,757],{"class":608},"// SELECT * FROM users \n",[270,759,760],{"class":272,"line":528},[270,761,762],{"class":608},"// WHERE department_id IN (SELECT id FROM departments WHERE name = 'Engineering')\n",[255,764,766],{"id":765},"subquery-with-not-in","Subquery with NOT IN",[260,768,770],{"className":262,"code":769,"language":264,"meta":265,"style":265},"import { notIn } from '@type32/tauri-sqlite-orm';\n\n// Find users NOT in the 'HR' department\nconst hrQuery = db.select(departments)\n  .where(eq(departments._.columns.name, 'HR'));\n\nconst nonHrUsers = await db.select(users)\n  .where(notIn(users._.columns.departmentId, subquery(hrQuery)))\n  .all();\n",[267,771,772,793,797,802,819,856,860,879,911],{"__ignoreMap":265},[270,773,774,776,778,781,783,785,787,789,791],{"class":272,"line":273},[270,775,277],{"class":276},[270,777,281],{"class":280},[270,779,780],{"class":284}," notIn",[270,782,294],{"class":280},[270,784,297],{"class":276},[270,786,300],{"class":280},[270,788,304],{"class":303},[270,790,307],{"class":280},[270,792,310],{"class":280},[270,794,795],{"class":272,"line":313},[270,796,349],{"emptyLinePlaceholder":348},[270,798,799],{"class":272,"line":345},[270,800,801],{"class":608},"// Find users NOT in the 'HR' department\n",[270,803,804,806,809,811,813,815,817],{"class":272,"line":352},[270,805,356],{"class":355},[270,807,808],{"class":284}," hrQuery ",[270,810,362],{"class":280},[270,812,621],{"class":284},[270,814,409],{"class":280},[270,816,626],{"class":365},[270,818,629],{"class":284},[270,820,821,823,825,827,829,831,833,835,837,839,841,843,845,847,850,852,854],{"class":272,"line":384},[270,822,634],{"class":280},[270,824,637],{"class":365},[270,826,369],{"class":284},[270,828,642],{"class":365},[270,830,645],{"class":284},[270,832,409],{"class":280},[270,834,650],{"class":284},[270,836,409],{"class":280},[270,838,655],{"class":284},[270,840,409],{"class":280},[270,842,443],{"class":284},[270,844,288],{"class":280},[270,846,300],{"class":280},[270,848,849],{"class":303},"HR",[270,851,307],{"class":280},[270,853,671],{"class":284},[270,855,310],{"class":280},[270,857,858],{"class":272,"line":428},[270,859,349],{"emptyLinePlaceholder":348},[270,861,862,864,867,869,871,873,875,877],{"class":272,"line":459},[270,863,356],{"class":355},[270,865,866],{"class":284}," nonHrUsers ",[270,868,362],{"class":280},[270,870,689],{"class":276},[270,872,621],{"class":284},[270,874,409],{"class":280},[270,876,626],{"class":365},[270,878,698],{"class":284},[270,880,881,883,885,887,890,892,894,896,898,900,902,904,906,908],{"class":272,"line":488},[270,882,634],{"class":280},[270,884,637],{"class":365},[270,886,369],{"class":284},[270,888,889],{"class":365},"notIn",[270,891,712],{"class":284},[270,893,409],{"class":280},[270,895,650],{"class":284},[270,897,409],{"class":280},[270,899,655],{"class":284},[270,901,409],{"class":280},[270,903,725],{"class":284},[270,905,288],{"class":280},[270,907,285],{"class":365},[270,909,910],{"class":284},"(hrQuery)))\n",[270,912,913,915,917,919],{"class":272,"line":498},[270,914,634],{"class":280},[270,916,739],{"class":365},[270,918,415],{"class":284},[270,920,310],{"class":280},[255,922,924],{"id":923},"exists-subqueries","EXISTS Subqueries",[260,926,928],{"className":262,"code":927,"language":264,"meta":265,"style":265},"const posts = sqliteTable('posts', {\n  id: integer('id').primaryKey().autoincrement(),\n  title: text('title').notNull(),\n  authorId: integer('author_id').notNull(),\n});\n\n// Find users who have written at least one post\nconst usersWithPosts = await db.select(users)\n  .where(\n    exists(subquery(\n      db.select(posts)\n        .where(eq(posts._.columns.authorId, users._.columns.id))\n    ))\n  )\n  .all();\n\n// Find users who haven't written any posts\nconst usersWithoutPosts = await db.select(users)\n  .where(\n    notExists(subquery(\n      db.select(posts)\n        .where(eq(posts._.columns.authorId, users._.columns.id))\n    ))\n  )\n  .all();\n",[267,929,930,954,986,1014,1042,1050,1054,1059,1078,1087,1099,1111,1156,1161,1167,1178,1183,1189,1209,1218,1230,1241,1282,1287,1292],{"__ignoreMap":265},[270,931,932,934,937,939,941,943,945,948,950,952],{"class":272,"line":273},[270,933,356],{"class":355},[270,935,936],{"class":284}," posts ",[270,938,362],{"class":280},[270,940,366],{"class":365},[270,942,369],{"class":284},[270,944,307],{"class":280},[270,946,947],{"class":303},"posts",[270,949,307],{"class":280},[270,951,288],{"class":280},[270,953,381],{"class":280},[270,955,956,958,960,962,964,966,968,970,972,974,976,978,980,982,984],{"class":272,"line":313},[270,957,388],{"class":387},[270,959,391],{"class":280},[270,961,394],{"class":365},[270,963,369],{"class":284},[270,965,307],{"class":280},[270,967,401],{"class":303},[270,969,307],{"class":280},[270,971,406],{"class":284},[270,973,409],{"class":280},[270,975,412],{"class":365},[270,977,415],{"class":284},[270,979,409],{"class":280},[270,981,420],{"class":365},[270,983,415],{"class":284},[270,985,425],{"class":280},[270,987,988,991,993,995,997,999,1002,1004,1006,1008,1010,1012],{"class":272,"line":345},[270,989,990],{"class":387},"  title",[270,992,391],{"class":280},[270,994,436],{"class":365},[270,996,369],{"class":284},[270,998,307],{"class":280},[270,1000,1001],{"class":303},"title",[270,1003,307],{"class":280},[270,1005,406],{"class":284},[270,1007,409],{"class":280},[270,1009,452],{"class":365},[270,1011,415],{"class":284},[270,1013,425],{"class":280},[270,1015,1016,1019,1021,1023,1025,1027,1030,1032,1034,1036,1038,1040],{"class":272,"line":352},[270,1017,1018],{"class":387},"  authorId",[270,1020,391],{"class":280},[270,1022,394],{"class":365},[270,1024,369],{"class":284},[270,1026,307],{"class":280},[270,1028,1029],{"class":303},"author_id",[270,1031,307],{"class":280},[270,1033,406],{"class":284},[270,1035,409],{"class":280},[270,1037,452],{"class":365},[270,1039,415],{"class":284},[270,1041,425],{"class":280},[270,1043,1044,1046,1048],{"class":272,"line":384},[270,1045,491],{"class":280},[270,1047,406],{"class":284},[270,1049,310],{"class":280},[270,1051,1052],{"class":272,"line":428},[270,1053,349],{"emptyLinePlaceholder":348},[270,1055,1056],{"class":272,"line":459},[270,1057,1058],{"class":608},"// Find users who have written at least one post\n",[270,1060,1061,1063,1066,1068,1070,1072,1074,1076],{"class":272,"line":488},[270,1062,356],{"class":355},[270,1064,1065],{"class":284}," usersWithPosts ",[270,1067,362],{"class":280},[270,1069,689],{"class":276},[270,1071,621],{"class":284},[270,1073,409],{"class":280},[270,1075,626],{"class":365},[270,1077,698],{"class":284},[270,1079,1080,1082,1084],{"class":272,"line":498},[270,1081,634],{"class":280},[270,1083,637],{"class":365},[270,1085,1086],{"class":284},"(\n",[270,1088,1089,1092,1094,1097],{"class":272,"line":503},[270,1090,1091],{"class":365},"    exists",[270,1093,369],{"class":284},[270,1095,1096],{"class":365},"subquery",[270,1098,1086],{"class":284},[270,1100,1101,1104,1106,1108],{"class":272,"line":528},[270,1102,1103],{"class":284},"      db",[270,1105,409],{"class":280},[270,1107,626],{"class":365},[270,1109,1110],{"class":284},"(posts)\n",[270,1112,1113,1116,1118,1120,1122,1125,1127,1129,1131,1133,1135,1138,1140,1143,1145,1147,1149,1151,1153],{"class":272,"line":561},[270,1114,1115],{"class":280},"        .",[270,1117,637],{"class":365},[270,1119,369],{"class":284},[270,1121,642],{"class":365},[270,1123,1124],{"class":284},"(posts",[270,1126,409],{"class":280},[270,1128,650],{"class":284},[270,1130,409],{"class":280},[270,1132,655],{"class":284},[270,1134,409],{"class":280},[270,1136,1137],{"class":284},"authorId",[270,1139,288],{"class":280},[270,1141,1142],{"class":284}," users",[270,1144,409],{"class":280},[270,1146,650],{"class":284},[270,1148,409],{"class":280},[270,1150,655],{"class":284},[270,1152,409],{"class":280},[270,1154,1155],{"class":284},"id))\n",[270,1157,1158],{"class":272,"line":588},[270,1159,1160],{"class":284},"    ))\n",[270,1162,1164],{"class":272,"line":1163},14,[270,1165,1166],{"class":284},"  )\n",[270,1168,1170,1172,1174,1176],{"class":272,"line":1169},15,[270,1171,634],{"class":280},[270,1173,739],{"class":365},[270,1175,415],{"class":284},[270,1177,310],{"class":280},[270,1179,1181],{"class":272,"line":1180},16,[270,1182,349],{"emptyLinePlaceholder":348},[270,1184,1186],{"class":272,"line":1185},17,[270,1187,1188],{"class":608},"// Find users who haven't written any posts\n",[270,1190,1192,1194,1197,1199,1201,1203,1205,1207],{"class":272,"line":1191},18,[270,1193,356],{"class":355},[270,1195,1196],{"class":284}," usersWithoutPosts ",[270,1198,362],{"class":280},[270,1200,689],{"class":276},[270,1202,621],{"class":284},[270,1204,409],{"class":280},[270,1206,626],{"class":365},[270,1208,698],{"class":284},[270,1210,1212,1214,1216],{"class":272,"line":1211},19,[270,1213,634],{"class":280},[270,1215,637],{"class":365},[270,1217,1086],{"class":284},[270,1219,1221,1224,1226,1228],{"class":272,"line":1220},20,[270,1222,1223],{"class":365},"    notExists",[270,1225,369],{"class":284},[270,1227,1096],{"class":365},[270,1229,1086],{"class":284},[270,1231,1233,1235,1237,1239],{"class":272,"line":1232},21,[270,1234,1103],{"class":284},[270,1236,409],{"class":280},[270,1238,626],{"class":365},[270,1240,1110],{"class":284},[270,1242,1244,1246,1248,1250,1252,1254,1256,1258,1260,1262,1264,1266,1268,1270,1272,1274,1276,1278,1280],{"class":272,"line":1243},22,[270,1245,1115],{"class":280},[270,1247,637],{"class":365},[270,1249,369],{"class":284},[270,1251,642],{"class":365},[270,1253,1124],{"class":284},[270,1255,409],{"class":280},[270,1257,650],{"class":284},[270,1259,409],{"class":280},[270,1261,655],{"class":284},[270,1263,409],{"class":280},[270,1265,1137],{"class":284},[270,1267,288],{"class":280},[270,1269,1142],{"class":284},[270,1271,409],{"class":280},[270,1273,650],{"class":284},[270,1275,409],{"class":280},[270,1277,655],{"class":284},[270,1279,409],{"class":280},[270,1281,1155],{"class":284},[270,1283,1285],{"class":272,"line":1284},23,[270,1286,1160],{"class":284},[270,1288,1290],{"class":272,"line":1289},24,[270,1291,1166],{"class":284},[270,1293,1295,1297,1299,1301],{"class":272,"line":1294},25,[270,1296,634],{"class":280},[270,1298,739],{"class":365},[270,1300,415],{"class":284},[270,1302,310],{"class":280},[255,1304,1306],{"id":1305},"scalar-subquery-comparisons","Scalar Subquery Comparisons",[260,1308,1310],{"className":262,"code":1309,"language":264,"meta":265,"style":265},"import { gtSubquery, ltSubquery, eqSubquery } from '@type32/tauri-sqlite-orm';\n\nconst orders = sqliteTable('orders', {\n  id: integer('id').primaryKey().autoincrement(),\n  userId: integer('user_id').notNull(),\n  total: integer('total').notNull(),\n});\n\n// Find orders greater than the average\nconst avgQuery = scalarSubquery(\n  db.db.select('SELECT AVG(total) FROM orders')\n);\n\nconst aboveAverageOrders = await db.select(orders)\n  .where(gtSubquery(orders._.columns.total, avgQuery))\n  .all();\n",[267,1311,1312,1343,1347,1371,1403,1431,1459,1467,1471,1476,1489,1515,1521,1525,1545,1576],{"__ignoreMap":265},[270,1313,1314,1316,1318,1321,1323,1326,1328,1331,1333,1335,1337,1339,1341],{"class":272,"line":273},[270,1315,277],{"class":276},[270,1317,281],{"class":280},[270,1319,1320],{"class":284}," gtSubquery",[270,1322,288],{"class":280},[270,1324,1325],{"class":284}," ltSubquery",[270,1327,288],{"class":280},[270,1329,1330],{"class":284}," eqSubquery",[270,1332,294],{"class":280},[270,1334,297],{"class":276},[270,1336,300],{"class":280},[270,1338,304],{"class":303},[270,1340,307],{"class":280},[270,1342,310],{"class":280},[270,1344,1345],{"class":272,"line":313},[270,1346,349],{"emptyLinePlaceholder":348},[270,1348,1349,1351,1354,1356,1358,1360,1362,1365,1367,1369],{"class":272,"line":345},[270,1350,356],{"class":355},[270,1352,1353],{"class":284}," orders ",[270,1355,362],{"class":280},[270,1357,366],{"class":365},[270,1359,369],{"class":284},[270,1361,307],{"class":280},[270,1363,1364],{"class":303},"orders",[270,1366,307],{"class":280},[270,1368,288],{"class":280},[270,1370,381],{"class":280},[270,1372,1373,1375,1377,1379,1381,1383,1385,1387,1389,1391,1393,1395,1397,1399,1401],{"class":272,"line":352},[270,1374,388],{"class":387},[270,1376,391],{"class":280},[270,1378,394],{"class":365},[270,1380,369],{"class":284},[270,1382,307],{"class":280},[270,1384,401],{"class":303},[270,1386,307],{"class":280},[270,1388,406],{"class":284},[270,1390,409],{"class":280},[270,1392,412],{"class":365},[270,1394,415],{"class":284},[270,1396,409],{"class":280},[270,1398,420],{"class":365},[270,1400,415],{"class":284},[270,1402,425],{"class":280},[270,1404,1405,1408,1410,1412,1414,1416,1419,1421,1423,1425,1427,1429],{"class":272,"line":384},[270,1406,1407],{"class":387},"  userId",[270,1409,391],{"class":280},[270,1411,394],{"class":365},[270,1413,369],{"class":284},[270,1415,307],{"class":280},[270,1417,1418],{"class":303},"user_id",[270,1420,307],{"class":280},[270,1422,406],{"class":284},[270,1424,409],{"class":280},[270,1426,452],{"class":365},[270,1428,415],{"class":284},[270,1430,425],{"class":280},[270,1432,1433,1436,1438,1440,1442,1444,1447,1449,1451,1453,1455,1457],{"class":272,"line":428},[270,1434,1435],{"class":387},"  total",[270,1437,391],{"class":280},[270,1439,394],{"class":365},[270,1441,369],{"class":284},[270,1443,307],{"class":280},[270,1445,1446],{"class":303},"total",[270,1448,307],{"class":280},[270,1450,406],{"class":284},[270,1452,409],{"class":280},[270,1454,452],{"class":365},[270,1456,415],{"class":284},[270,1458,425],{"class":280},[270,1460,1461,1463,1465],{"class":272,"line":459},[270,1462,491],{"class":280},[270,1464,406],{"class":284},[270,1466,310],{"class":280},[270,1468,1469],{"class":272,"line":488},[270,1470,349],{"emptyLinePlaceholder":348},[270,1472,1473],{"class":272,"line":498},[270,1474,1475],{"class":608},"// Find orders greater than the average\n",[270,1477,1478,1480,1483,1485,1487],{"class":272,"line":503},[270,1479,356],{"class":355},[270,1481,1482],{"class":284}," avgQuery ",[270,1484,362],{"class":280},[270,1486,291],{"class":365},[270,1488,1086],{"class":284},[270,1490,1491,1494,1496,1499,1501,1503,1505,1507,1510,1512],{"class":272,"line":528},[270,1492,1493],{"class":284},"  db",[270,1495,409],{"class":280},[270,1497,1498],{"class":284},"db",[270,1500,409],{"class":280},[270,1502,626],{"class":365},[270,1504,369],{"class":284},[270,1506,307],{"class":280},[270,1508,1509],{"class":303},"SELECT AVG(total) FROM orders",[270,1511,307],{"class":280},[270,1513,1514],{"class":284},")\n",[270,1516,1517,1519],{"class":272,"line":561},[270,1518,406],{"class":284},[270,1520,310],{"class":280},[270,1522,1523],{"class":272,"line":588},[270,1524,349],{"emptyLinePlaceholder":348},[270,1526,1527,1529,1532,1534,1536,1538,1540,1542],{"class":272,"line":1163},[270,1528,356],{"class":355},[270,1530,1531],{"class":284}," aboveAverageOrders ",[270,1533,362],{"class":280},[270,1535,689],{"class":276},[270,1537,621],{"class":284},[270,1539,409],{"class":280},[270,1541,626],{"class":365},[270,1543,1544],{"class":284},"(orders)\n",[270,1546,1547,1549,1551,1553,1556,1559,1561,1563,1565,1567,1569,1571,1573],{"class":272,"line":1169},[270,1548,634],{"class":280},[270,1550,637],{"class":365},[270,1552,369],{"class":284},[270,1554,1555],{"class":365},"gtSubquery",[270,1557,1558],{"class":284},"(orders",[270,1560,409],{"class":280},[270,1562,650],{"class":284},[270,1564,409],{"class":280},[270,1566,655],{"class":284},[270,1568,409],{"class":280},[270,1570,1446],{"class":284},[270,1572,288],{"class":280},[270,1574,1575],{"class":284}," avgQuery))\n",[270,1577,1578,1580,1582,1584],{"class":272,"line":1180},[270,1579,634],{"class":280},[270,1581,739],{"class":365},[270,1583,415],{"class":284},[270,1585,310],{"class":280},[247,1587,1589],{"id":1588},"aggregate-functions","Aggregate Functions",[243,1591,1592],{},"Aggregate functions perform calculations on sets of rows. The ORM provides type-safe aggregate functions.",[255,1594,1596],{"id":1595},"available-aggregates","Available Aggregates",[260,1598,1600],{"className":262,"code":1599,"language":264,"meta":265,"style":265},"import { \n  count, \n  countDistinct, \n  sum, \n  avg, \n  min, \n  max, \n  groupConcat \n} from '@type32/tauri-sqlite-orm';\n",[267,1601,1602,1611,1620,1629,1638,1647,1656,1665,1672],{"__ignoreMap":265},[270,1603,1604,1606,1608],{"class":272,"line":273},[270,1605,277],{"class":276},[270,1607,281],{"class":280},[270,1609,1610],{"class":387}," \n",[270,1612,1613,1616,1618],{"class":272,"line":313},[270,1614,1615],{"class":284},"  count",[270,1617,288],{"class":280},[270,1619,1610],{"class":387},[270,1621,1622,1625,1627],{"class":272,"line":345},[270,1623,1624],{"class":284},"  countDistinct",[270,1626,288],{"class":280},[270,1628,1610],{"class":387},[270,1630,1631,1634,1636],{"class":272,"line":352},[270,1632,1633],{"class":284},"  sum",[270,1635,288],{"class":280},[270,1637,1610],{"class":387},[270,1639,1640,1643,1645],{"class":272,"line":384},[270,1641,1642],{"class":284},"  avg",[270,1644,288],{"class":280},[270,1646,1610],{"class":387},[270,1648,1649,1652,1654],{"class":272,"line":428},[270,1650,1651],{"class":284},"  min",[270,1653,288],{"class":280},[270,1655,1610],{"class":387},[270,1657,1658,1661,1663],{"class":272,"line":459},[270,1659,1660],{"class":284},"  max",[270,1662,288],{"class":280},[270,1664,1610],{"class":387},[270,1666,1667,1670],{"class":272,"line":488},[270,1668,1669],{"class":284},"  groupConcat",[270,1671,1610],{"class":387},[270,1673,1674,1676,1678,1680,1682,1684],{"class":272,"line":498},[270,1675,491],{"class":280},[270,1677,297],{"class":276},[270,1679,300],{"class":280},[270,1681,304],{"class":303},[270,1683,307],{"class":280},[270,1685,310],{"class":280},[255,1687,1689],{"id":1688},"using-aggregates","Using Aggregates",[243,1691,1692],{},"While the query builder doesn't yet have a dedicated aggregate API, you can use aggregates with raw SQL:",[260,1694,1696],{"className":262,"code":1695,"language":264,"meta":265,"style":265},"// Count all users\nconst result = await db.db.select('SELECT COUNT(*) as count FROM users');\nconsole.log(result[0].count);\n\n// Or use the .count() helper\nconst count = await db.select(users).count();\n",[267,1697,1698,1703,1737,1764,1768,1773],{"__ignoreMap":265},[270,1699,1700],{"class":272,"line":273},[270,1701,1702],{"class":608},"// Count all users\n",[270,1704,1705,1707,1710,1712,1714,1716,1718,1720,1722,1724,1726,1728,1731,1733,1735],{"class":272,"line":313},[270,1706,356],{"class":355},[270,1708,1709],{"class":284}," result ",[270,1711,362],{"class":280},[270,1713,689],{"class":276},[270,1715,621],{"class":284},[270,1717,409],{"class":280},[270,1719,1498],{"class":284},[270,1721,409],{"class":280},[270,1723,626],{"class":365},[270,1725,369],{"class":284},[270,1727,307],{"class":280},[270,1729,1730],{"class":303},"SELECT COUNT(*) as count FROM users",[270,1732,307],{"class":280},[270,1734,406],{"class":284},[270,1736,310],{"class":280},[270,1738,1739,1742,1744,1747,1750,1754,1757,1759,1762],{"class":272,"line":345},[270,1740,1741],{"class":284},"console",[270,1743,409],{"class":280},[270,1745,1746],{"class":365},"log",[270,1748,1749],{"class":284},"(result[",[270,1751,1753],{"class":1752},"sbssI","0",[270,1755,1756],{"class":284},"]",[270,1758,409],{"class":280},[270,1760,1761],{"class":284},"count)",[270,1763,310],{"class":280},[270,1765,1766],{"class":272,"line":352},[270,1767,349],{"emptyLinePlaceholder":348},[270,1769,1770],{"class":272,"line":384},[270,1771,1772],{"class":608},"// Or use the .count() helper\n",[270,1774,1775,1777,1780,1782,1784,1786,1788,1790,1793,1795,1798,1800],{"class":272,"line":428},[270,1776,356],{"class":355},[270,1778,1779],{"class":284}," count ",[270,1781,362],{"class":280},[270,1783,689],{"class":276},[270,1785,621],{"class":284},[270,1787,409],{"class":280},[270,1789,626],{"class":365},[270,1791,1792],{"class":284},"(users)",[270,1794,409],{"class":280},[270,1796,1797],{"class":365},"count",[270,1799,415],{"class":284},[270,1801,310],{"class":280},[255,1803,1805],{"id":1804},"group-by-with-aggregates","GROUP BY with Aggregates",[260,1807,1809],{"className":262,"code":1808,"language":264,"meta":265,"style":265},"const posts = sqliteTable('posts', {\n  id: integer('id').primaryKey().autoincrement(),\n  title: text('title').notNull(),\n  authorId: integer('author_id').notNull(),\n  views: integer('views').notNull().default(0),\n});\n\n// Count posts per author\nconst postsByAuthor = await db.db.select(`\n  SELECT \n    author_id,\n    COUNT(*) as post_count,\n    SUM(views) as total_views,\n    AVG(views) as avg_views\n  FROM posts\n  GROUP BY author_id\n`);\n",[267,1810,1811,1833,1865,1891,1917,1956,1964,1968,1973,1999,2004,2009,2014,2019,2024,2029,2034],{"__ignoreMap":265},[270,1812,1813,1815,1817,1819,1821,1823,1825,1827,1829,1831],{"class":272,"line":273},[270,1814,356],{"class":355},[270,1816,936],{"class":284},[270,1818,362],{"class":280},[270,1820,366],{"class":365},[270,1822,369],{"class":284},[270,1824,307],{"class":280},[270,1826,947],{"class":303},[270,1828,307],{"class":280},[270,1830,288],{"class":280},[270,1832,381],{"class":280},[270,1834,1835,1837,1839,1841,1843,1845,1847,1849,1851,1853,1855,1857,1859,1861,1863],{"class":272,"line":313},[270,1836,388],{"class":387},[270,1838,391],{"class":280},[270,1840,394],{"class":365},[270,1842,369],{"class":284},[270,1844,307],{"class":280},[270,1846,401],{"class":303},[270,1848,307],{"class":280},[270,1850,406],{"class":284},[270,1852,409],{"class":280},[270,1854,412],{"class":365},[270,1856,415],{"class":284},[270,1858,409],{"class":280},[270,1860,420],{"class":365},[270,1862,415],{"class":284},[270,1864,425],{"class":280},[270,1866,1867,1869,1871,1873,1875,1877,1879,1881,1883,1885,1887,1889],{"class":272,"line":345},[270,1868,990],{"class":387},[270,1870,391],{"class":280},[270,1872,436],{"class":365},[270,1874,369],{"class":284},[270,1876,307],{"class":280},[270,1878,1001],{"class":303},[270,1880,307],{"class":280},[270,1882,406],{"class":284},[270,1884,409],{"class":280},[270,1886,452],{"class":365},[270,1888,415],{"class":284},[270,1890,425],{"class":280},[270,1892,1893,1895,1897,1899,1901,1903,1905,1907,1909,1911,1913,1915],{"class":272,"line":352},[270,1894,1018],{"class":387},[270,1896,391],{"class":280},[270,1898,394],{"class":365},[270,1900,369],{"class":284},[270,1902,307],{"class":280},[270,1904,1029],{"class":303},[270,1906,307],{"class":280},[270,1908,406],{"class":284},[270,1910,409],{"class":280},[270,1912,452],{"class":365},[270,1914,415],{"class":284},[270,1916,425],{"class":280},[270,1918,1919,1922,1924,1926,1928,1930,1933,1935,1937,1939,1941,1943,1945,1948,1950,1952,1954],{"class":272,"line":384},[270,1920,1921],{"class":387},"  views",[270,1923,391],{"class":280},[270,1925,394],{"class":365},[270,1927,369],{"class":284},[270,1929,307],{"class":280},[270,1931,1932],{"class":303},"views",[270,1934,307],{"class":280},[270,1936,406],{"class":284},[270,1938,409],{"class":280},[270,1940,452],{"class":365},[270,1942,415],{"class":284},[270,1944,409],{"class":280},[270,1946,1947],{"class":365},"default",[270,1949,369],{"class":284},[270,1951,1753],{"class":1752},[270,1953,406],{"class":284},[270,1955,425],{"class":280},[270,1957,1958,1960,1962],{"class":272,"line":428},[270,1959,491],{"class":280},[270,1961,406],{"class":284},[270,1963,310],{"class":280},[270,1965,1966],{"class":272,"line":459},[270,1967,349],{"emptyLinePlaceholder":348},[270,1969,1970],{"class":272,"line":488},[270,1971,1972],{"class":608},"// Count posts per author\n",[270,1974,1975,1977,1980,1982,1984,1986,1988,1990,1992,1994,1996],{"class":272,"line":498},[270,1976,356],{"class":355},[270,1978,1979],{"class":284}," postsByAuthor ",[270,1981,362],{"class":280},[270,1983,689],{"class":276},[270,1985,621],{"class":284},[270,1987,409],{"class":280},[270,1989,1498],{"class":284},[270,1991,409],{"class":280},[270,1993,626],{"class":365},[270,1995,369],{"class":284},[270,1997,1998],{"class":280},"`\n",[270,2000,2001],{"class":272,"line":503},[270,2002,2003],{"class":303},"  SELECT \n",[270,2005,2006],{"class":272,"line":528},[270,2007,2008],{"class":303},"    author_id,\n",[270,2010,2011],{"class":272,"line":561},[270,2012,2013],{"class":303},"    COUNT(*) as post_count,\n",[270,2015,2016],{"class":272,"line":588},[270,2017,2018],{"class":303},"    SUM(views) as total_views,\n",[270,2020,2021],{"class":272,"line":1163},[270,2022,2023],{"class":303},"    AVG(views) as avg_views\n",[270,2025,2026],{"class":272,"line":1169},[270,2027,2028],{"class":303},"  FROM posts\n",[270,2030,2031],{"class":272,"line":1180},[270,2032,2033],{"class":303},"  GROUP BY author_id\n",[270,2035,2036,2039,2041],{"class":272,"line":1185},[270,2037,2038],{"class":280},"`",[270,2040,406],{"class":284},[270,2042,310],{"class":280},[255,2044,2046],{"id":2045},"sqlite-group_concat","SQLite GROUP_CONCAT",[260,2048,2050],{"className":262,"code":2049,"language":264,"meta":265,"style":265},"// Concatenate related values\nconst tagsByPost = await db.db.select(`\n  SELECT \n    post_id,\n    GROUP_CONCAT(tag_name, ', ') as tags\n  FROM post_tags\n  GROUP BY post_id\n`);\n\n// Result: [{ post_id: 1, tags: 'javascript, typescript, node' }, ...]\n",[267,2051,2052,2057,2082,2086,2091,2096,2101,2106,2114,2118],{"__ignoreMap":265},[270,2053,2054],{"class":272,"line":273},[270,2055,2056],{"class":608},"// Concatenate related values\n",[270,2058,2059,2061,2064,2066,2068,2070,2072,2074,2076,2078,2080],{"class":272,"line":313},[270,2060,356],{"class":355},[270,2062,2063],{"class":284}," tagsByPost ",[270,2065,362],{"class":280},[270,2067,689],{"class":276},[270,2069,621],{"class":284},[270,2071,409],{"class":280},[270,2073,1498],{"class":284},[270,2075,409],{"class":280},[270,2077,626],{"class":365},[270,2079,369],{"class":284},[270,2081,1998],{"class":280},[270,2083,2084],{"class":272,"line":345},[270,2085,2003],{"class":303},[270,2087,2088],{"class":272,"line":352},[270,2089,2090],{"class":303},"    post_id,\n",[270,2092,2093],{"class":272,"line":384},[270,2094,2095],{"class":303},"    GROUP_CONCAT(tag_name, ', ') as tags\n",[270,2097,2098],{"class":272,"line":428},[270,2099,2100],{"class":303},"  FROM post_tags\n",[270,2102,2103],{"class":272,"line":459},[270,2104,2105],{"class":303},"  GROUP BY post_id\n",[270,2107,2108,2110,2112],{"class":272,"line":488},[270,2109,2038],{"class":280},[270,2111,406],{"class":284},[270,2113,310],{"class":280},[270,2115,2116],{"class":272,"line":498},[270,2117,349],{"emptyLinePlaceholder":348},[270,2119,2120],{"class":272,"line":503},[270,2121,2122],{"class":608},"// Result: [{ post_id: 1, tags: 'javascript, typescript, node' }, ...]\n",[247,2124,2126],{"id":2125},"complex-example-subquery-aggregates","Complex Example: Subquery + Aggregates",[260,2128,2130],{"className":262,"code":2129,"language":264,"meta":265,"style":265},"const products = sqliteTable('products', {\n  id: integer('id').primaryKey().autoincrement(),\n  name: text('name').notNull(),\n  categoryId: integer('category_id').notNull(),\n  price: integer('price').notNull(),\n});\n\nconst categories = sqliteTable('categories', {\n  id: integer('id').primaryKey().autoincrement(),\n  name: text('name').notNull(),\n});\n\n// Find categories with above-average priced products\nconst avgPriceQuery = db.db.select('SELECT AVG(price) FROM products');\n\nconst expensiveCategories = await db.select(categories)\n  .where(\n    exists(subquery(\n      db.select(products)\n        .where(eq(products._.columns.categoryId, categories._.columns.id))\n        .where(gtSubquery(\n          products._.columns.price,\n          scalarSubquery(avgPriceQuery)\n        ))\n    ))\n  )\n  .all();\n",[267,2131,2132,2156,2188,2214,2242,2270,2278,2282,2306,2338,2364,2372,2376,2381,2413,2417,2437,2445,2455,2466,2509,2521,2540,2548,2553,2557,2562],{"__ignoreMap":265},[270,2133,2134,2136,2139,2141,2143,2145,2147,2150,2152,2154],{"class":272,"line":273},[270,2135,356],{"class":355},[270,2137,2138],{"class":284}," products ",[270,2140,362],{"class":280},[270,2142,366],{"class":365},[270,2144,369],{"class":284},[270,2146,307],{"class":280},[270,2148,2149],{"class":303},"products",[270,2151,307],{"class":280},[270,2153,288],{"class":280},[270,2155,381],{"class":280},[270,2157,2158,2160,2162,2164,2166,2168,2170,2172,2174,2176,2178,2180,2182,2184,2186],{"class":272,"line":313},[270,2159,388],{"class":387},[270,2161,391],{"class":280},[270,2163,394],{"class":365},[270,2165,369],{"class":284},[270,2167,307],{"class":280},[270,2169,401],{"class":303},[270,2171,307],{"class":280},[270,2173,406],{"class":284},[270,2175,409],{"class":280},[270,2177,412],{"class":365},[270,2179,415],{"class":284},[270,2181,409],{"class":280},[270,2183,420],{"class":365},[270,2185,415],{"class":284},[270,2187,425],{"class":280},[270,2189,2190,2192,2194,2196,2198,2200,2202,2204,2206,2208,2210,2212],{"class":272,"line":345},[270,2191,431],{"class":387},[270,2193,391],{"class":280},[270,2195,436],{"class":365},[270,2197,369],{"class":284},[270,2199,307],{"class":280},[270,2201,443],{"class":303},[270,2203,307],{"class":280},[270,2205,406],{"class":284},[270,2207,409],{"class":280},[270,2209,452],{"class":365},[270,2211,415],{"class":284},[270,2213,425],{"class":280},[270,2215,2216,2219,2221,2223,2225,2227,2230,2232,2234,2236,2238,2240],{"class":272,"line":352},[270,2217,2218],{"class":387},"  categoryId",[270,2220,391],{"class":280},[270,2222,394],{"class":365},[270,2224,369],{"class":284},[270,2226,307],{"class":280},[270,2228,2229],{"class":303},"category_id",[270,2231,307],{"class":280},[270,2233,406],{"class":284},[270,2235,409],{"class":280},[270,2237,452],{"class":365},[270,2239,415],{"class":284},[270,2241,425],{"class":280},[270,2243,2244,2247,2249,2251,2253,2255,2258,2260,2262,2264,2266,2268],{"class":272,"line":384},[270,2245,2246],{"class":387},"  price",[270,2248,391],{"class":280},[270,2250,394],{"class":365},[270,2252,369],{"class":284},[270,2254,307],{"class":280},[270,2256,2257],{"class":303},"price",[270,2259,307],{"class":280},[270,2261,406],{"class":284},[270,2263,409],{"class":280},[270,2265,452],{"class":365},[270,2267,415],{"class":284},[270,2269,425],{"class":280},[270,2271,2272,2274,2276],{"class":272,"line":428},[270,2273,491],{"class":280},[270,2275,406],{"class":284},[270,2277,310],{"class":280},[270,2279,2280],{"class":272,"line":459},[270,2281,349],{"emptyLinePlaceholder":348},[270,2283,2284,2286,2289,2291,2293,2295,2297,2300,2302,2304],{"class":272,"line":488},[270,2285,356],{"class":355},[270,2287,2288],{"class":284}," categories ",[270,2290,362],{"class":280},[270,2292,366],{"class":365},[270,2294,369],{"class":284},[270,2296,307],{"class":280},[270,2298,2299],{"class":303},"categories",[270,2301,307],{"class":280},[270,2303,288],{"class":280},[270,2305,381],{"class":280},[270,2307,2308,2310,2312,2314,2316,2318,2320,2322,2324,2326,2328,2330,2332,2334,2336],{"class":272,"line":498},[270,2309,388],{"class":387},[270,2311,391],{"class":280},[270,2313,394],{"class":365},[270,2315,369],{"class":284},[270,2317,307],{"class":280},[270,2319,401],{"class":303},[270,2321,307],{"class":280},[270,2323,406],{"class":284},[270,2325,409],{"class":280},[270,2327,412],{"class":365},[270,2329,415],{"class":284},[270,2331,409],{"class":280},[270,2333,420],{"class":365},[270,2335,415],{"class":284},[270,2337,425],{"class":280},[270,2339,2340,2342,2344,2346,2348,2350,2352,2354,2356,2358,2360,2362],{"class":272,"line":503},[270,2341,431],{"class":387},[270,2343,391],{"class":280},[270,2345,436],{"class":365},[270,2347,369],{"class":284},[270,2349,307],{"class":280},[270,2351,443],{"class":303},[270,2353,307],{"class":280},[270,2355,406],{"class":284},[270,2357,409],{"class":280},[270,2359,452],{"class":365},[270,2361,415],{"class":284},[270,2363,425],{"class":280},[270,2365,2366,2368,2370],{"class":272,"line":528},[270,2367,491],{"class":280},[270,2369,406],{"class":284},[270,2371,310],{"class":280},[270,2373,2374],{"class":272,"line":561},[270,2375,349],{"emptyLinePlaceholder":348},[270,2377,2378],{"class":272,"line":588},[270,2379,2380],{"class":608},"// Find categories with above-average priced products\n",[270,2382,2383,2385,2388,2390,2392,2394,2396,2398,2400,2402,2404,2407,2409,2411],{"class":272,"line":1163},[270,2384,356],{"class":355},[270,2386,2387],{"class":284}," avgPriceQuery ",[270,2389,362],{"class":280},[270,2391,621],{"class":284},[270,2393,409],{"class":280},[270,2395,1498],{"class":284},[270,2397,409],{"class":280},[270,2399,626],{"class":365},[270,2401,369],{"class":284},[270,2403,307],{"class":280},[270,2405,2406],{"class":303},"SELECT AVG(price) FROM products",[270,2408,307],{"class":280},[270,2410,406],{"class":284},[270,2412,310],{"class":280},[270,2414,2415],{"class":272,"line":1169},[270,2416,349],{"emptyLinePlaceholder":348},[270,2418,2419,2421,2424,2426,2428,2430,2432,2434],{"class":272,"line":1180},[270,2420,356],{"class":355},[270,2422,2423],{"class":284}," expensiveCategories ",[270,2425,362],{"class":280},[270,2427,689],{"class":276},[270,2429,621],{"class":284},[270,2431,409],{"class":280},[270,2433,626],{"class":365},[270,2435,2436],{"class":284},"(categories)\n",[270,2438,2439,2441,2443],{"class":272,"line":1185},[270,2440,634],{"class":280},[270,2442,637],{"class":365},[270,2444,1086],{"class":284},[270,2446,2447,2449,2451,2453],{"class":272,"line":1191},[270,2448,1091],{"class":365},[270,2450,369],{"class":284},[270,2452,1096],{"class":365},[270,2454,1086],{"class":284},[270,2456,2457,2459,2461,2463],{"class":272,"line":1211},[270,2458,1103],{"class":284},[270,2460,409],{"class":280},[270,2462,626],{"class":365},[270,2464,2465],{"class":284},"(products)\n",[270,2467,2468,2470,2472,2474,2476,2479,2481,2483,2485,2487,2489,2492,2494,2497,2499,2501,2503,2505,2507],{"class":272,"line":1220},[270,2469,1115],{"class":280},[270,2471,637],{"class":365},[270,2473,369],{"class":284},[270,2475,642],{"class":365},[270,2477,2478],{"class":284},"(products",[270,2480,409],{"class":280},[270,2482,650],{"class":284},[270,2484,409],{"class":280},[270,2486,655],{"class":284},[270,2488,409],{"class":280},[270,2490,2491],{"class":284},"categoryId",[270,2493,288],{"class":280},[270,2495,2496],{"class":284}," categories",[270,2498,409],{"class":280},[270,2500,650],{"class":284},[270,2502,409],{"class":280},[270,2504,655],{"class":284},[270,2506,409],{"class":280},[270,2508,1155],{"class":284},[270,2510,2511,2513,2515,2517,2519],{"class":272,"line":1232},[270,2512,1115],{"class":280},[270,2514,637],{"class":365},[270,2516,369],{"class":284},[270,2518,1555],{"class":365},[270,2520,1086],{"class":284},[270,2522,2523,2526,2528,2530,2532,2534,2536,2538],{"class":272,"line":1243},[270,2524,2525],{"class":284},"          products",[270,2527,409],{"class":280},[270,2529,650],{"class":284},[270,2531,409],{"class":280},[270,2533,655],{"class":284},[270,2535,409],{"class":280},[270,2537,2257],{"class":284},[270,2539,425],{"class":280},[270,2541,2542,2545],{"class":272,"line":1284},[270,2543,2544],{"class":365},"          scalarSubquery",[270,2546,2547],{"class":284},"(avgPriceQuery)\n",[270,2549,2550],{"class":272,"line":1289},[270,2551,2552],{"class":284},"        ))\n",[270,2554,2555],{"class":272,"line":1294},[270,2556,1160],{"class":284},[270,2558,2560],{"class":272,"line":2559},26,[270,2561,1166],{"class":284},[270,2563,2565,2567,2569,2571],{"class":272,"line":2564},27,[270,2566,634],{"class":280},[270,2568,739],{"class":365},[270,2570,415],{"class":284},[270,2572,310],{"class":280},[247,2574,2576],{"id":2575},"best-practices","Best Practices",[2578,2579,2580,2592,2598,2604,2613],"ol",{},[2581,2582,2583,2591],"li",{},[2584,2585,2586,2587,2590],"strong",{},"Use ",[267,2588,2589],{},".count()"," helper"," instead of raw COUNT(*) when possible",[2581,2593,2594,2597],{},[2584,2595,2596],{},"Index subquery columns"," for better performance",[2581,2599,2600,2603],{},[2584,2601,2602],{},"Test subquery performance"," - sometimes JOINs are faster",[2581,2605,2606,2612],{},[2584,2607,2586,2608,2611],{},[267,2609,2610],{},".toSQL()"," to verify"," what SQL is generated",[2581,2614,2615,2618],{},[2584,2616,2617],{},"Consider using relations"," instead of manual subqueries when possible",[247,2620,2622],{"id":2621},"performance-tips","Performance Tips",[260,2624,2626],{"className":262,"code":2625,"language":264,"meta":265,"style":265},"// ❌ Slow: Correlated subquery for each row\nconst usersWithPostCount = await db.db.select(`\n  SELECT u.*, \n    (SELECT COUNT(*) FROM posts WHERE author_id = u.id) as post_count\n  FROM users u\n`);\n\n// ✅ Better: Use a JOIN or relation with .count()\nconst usersWithPosts = await db.select(users)\n  .include({ posts: true })\n  .all();\n\n// Then count in JavaScript:\nconst usersWithCounts = usersWithPosts.map(user => ({\n  ...user,\n  postCount: user.posts.length\n}));\n",[267,2627,2628,2633,2658,2663,2668,2673,2681,2685,2690,2708,2733,2743,2747,2752,2784,2793,2812],{"__ignoreMap":265},[270,2629,2630],{"class":272,"line":273},[270,2631,2632],{"class":608},"// ❌ Slow: Correlated subquery for each row\n",[270,2634,2635,2637,2640,2642,2644,2646,2648,2650,2652,2654,2656],{"class":272,"line":313},[270,2636,356],{"class":355},[270,2638,2639],{"class":284}," usersWithPostCount ",[270,2641,362],{"class":280},[270,2643,689],{"class":276},[270,2645,621],{"class":284},[270,2647,409],{"class":280},[270,2649,1498],{"class":284},[270,2651,409],{"class":280},[270,2653,626],{"class":365},[270,2655,369],{"class":284},[270,2657,1998],{"class":280},[270,2659,2660],{"class":272,"line":345},[270,2661,2662],{"class":303},"  SELECT u.*, \n",[270,2664,2665],{"class":272,"line":352},[270,2666,2667],{"class":303},"    (SELECT COUNT(*) FROM posts WHERE author_id = u.id) as post_count\n",[270,2669,2670],{"class":272,"line":384},[270,2671,2672],{"class":303},"  FROM users u\n",[270,2674,2675,2677,2679],{"class":272,"line":428},[270,2676,2038],{"class":280},[270,2678,406],{"class":284},[270,2680,310],{"class":280},[270,2682,2683],{"class":272,"line":459},[270,2684,349],{"emptyLinePlaceholder":348},[270,2686,2687],{"class":272,"line":488},[270,2688,2689],{"class":608},"// ✅ Better: Use a JOIN or relation with .count()\n",[270,2691,2692,2694,2696,2698,2700,2702,2704,2706],{"class":272,"line":498},[270,2693,356],{"class":355},[270,2695,1065],{"class":284},[270,2697,362],{"class":280},[270,2699,689],{"class":276},[270,2701,621],{"class":284},[270,2703,409],{"class":280},[270,2705,626],{"class":365},[270,2707,698],{"class":284},[270,2709,2710,2712,2715,2717,2720,2723,2725,2729,2731],{"class":272,"line":503},[270,2711,634],{"class":280},[270,2713,2714],{"class":365},"include",[270,2716,369],{"class":284},[270,2718,2719],{"class":280},"{",[270,2721,2722],{"class":387}," posts",[270,2724,391],{"class":280},[270,2726,2728],{"class":2727},"sfNiH"," true",[270,2730,294],{"class":280},[270,2732,1514],{"class":284},[270,2734,2735,2737,2739,2741],{"class":272,"line":528},[270,2736,634],{"class":280},[270,2738,739],{"class":365},[270,2740,415],{"class":284},[270,2742,310],{"class":280},[270,2744,2745],{"class":272,"line":561},[270,2746,349],{"emptyLinePlaceholder":348},[270,2748,2749],{"class":272,"line":588},[270,2750,2751],{"class":608},"// Then count in JavaScript:\n",[270,2753,2754,2756,2759,2761,2764,2766,2769,2771,2775,2778,2781],{"class":272,"line":1163},[270,2755,356],{"class":355},[270,2757,2758],{"class":284}," usersWithCounts ",[270,2760,362],{"class":280},[270,2762,2763],{"class":284}," usersWithPosts",[270,2765,409],{"class":280},[270,2767,2768],{"class":365},"map",[270,2770,369],{"class":284},[270,2772,2774],{"class":2773},"sHdIc","user",[270,2776,2777],{"class":355}," =>",[270,2779,2780],{"class":284}," (",[270,2782,2783],{"class":280},"{\n",[270,2785,2786,2789,2791],{"class":272,"line":1169},[270,2787,2788],{"class":280},"  ...",[270,2790,2774],{"class":284},[270,2792,425],{"class":280},[270,2794,2795,2798,2800,2803,2805,2807,2809],{"class":272,"line":1180},[270,2796,2797],{"class":387},"  postCount",[270,2799,391],{"class":280},[270,2801,2802],{"class":284}," user",[270,2804,409],{"class":280},[270,2806,947],{"class":284},[270,2808,409],{"class":280},[270,2810,2811],{"class":284},"length\n",[270,2813,2814,2816,2818],{"class":272,"line":1185},[270,2815,491],{"class":280},[270,2817,671],{"class":284},[270,2819,310],{"class":280},[247,2821,2823],{"id":2822},"debugging-subqueries","Debugging Subqueries",[260,2825,2827],{"className":262,"code":2826,"language":264,"meta":265,"style":265},"// Build subquery first\nconst subq = db.select(departments)\n  .where(eq(departments._.columns.name, 'Engineering'));\n\nconsole.log('Subquery:', subq.toSQL());\n\n// Then use in main query\nconst mainQuery = db.select(users)\n  .where(inArray(users._.columns.departmentId, subquery(subq)));\n\nconsole.log('Main query:', mainQuery.toSQL());\n\n// Execute\nconst results = await mainQuery.all();\n",[267,2828,2829,2834,2851,2887,2891,2923,2927,2932,2949,2982,2986,3016,3020,3025],{"__ignoreMap":265},[270,2830,2831],{"class":272,"line":273},[270,2832,2833],{"class":608},"// Build subquery first\n",[270,2835,2836,2838,2841,2843,2845,2847,2849],{"class":272,"line":313},[270,2837,356],{"class":355},[270,2839,2840],{"class":284}," subq ",[270,2842,362],{"class":280},[270,2844,621],{"class":284},[270,2846,409],{"class":280},[270,2848,626],{"class":365},[270,2850,629],{"class":284},[270,2852,2853,2855,2857,2859,2861,2863,2865,2867,2869,2871,2873,2875,2877,2879,2881,2883,2885],{"class":272,"line":345},[270,2854,634],{"class":280},[270,2856,637],{"class":365},[270,2858,369],{"class":284},[270,2860,642],{"class":365},[270,2862,645],{"class":284},[270,2864,409],{"class":280},[270,2866,650],{"class":284},[270,2868,409],{"class":280},[270,2870,655],{"class":284},[270,2872,409],{"class":280},[270,2874,443],{"class":284},[270,2876,288],{"class":280},[270,2878,300],{"class":280},[270,2880,666],{"class":303},[270,2882,307],{"class":280},[270,2884,671],{"class":284},[270,2886,310],{"class":280},[270,2888,2889],{"class":272,"line":352},[270,2890,349],{"emptyLinePlaceholder":348},[270,2892,2893,2895,2897,2899,2901,2903,2906,2908,2910,2913,2915,2918,2921],{"class":272,"line":384},[270,2894,1741],{"class":284},[270,2896,409],{"class":280},[270,2898,1746],{"class":365},[270,2900,369],{"class":284},[270,2902,307],{"class":280},[270,2904,2905],{"class":303},"Subquery:",[270,2907,307],{"class":280},[270,2909,288],{"class":280},[270,2911,2912],{"class":284}," subq",[270,2914,409],{"class":280},[270,2916,2917],{"class":365},"toSQL",[270,2919,2920],{"class":284},"())",[270,2922,310],{"class":280},[270,2924,2925],{"class":272,"line":428},[270,2926,349],{"emptyLinePlaceholder":348},[270,2928,2929],{"class":272,"line":459},[270,2930,2931],{"class":608},"// Then use in main query\n",[270,2933,2934,2936,2939,2941,2943,2945,2947],{"class":272,"line":488},[270,2935,356],{"class":355},[270,2937,2938],{"class":284}," mainQuery ",[270,2940,362],{"class":280},[270,2942,621],{"class":284},[270,2944,409],{"class":280},[270,2946,626],{"class":365},[270,2948,698],{"class":284},[270,2950,2951,2953,2955,2957,2959,2961,2963,2965,2967,2969,2971,2973,2975,2977,2980],{"class":272,"line":498},[270,2952,634],{"class":280},[270,2954,637],{"class":365},[270,2956,369],{"class":284},[270,2958,709],{"class":365},[270,2960,712],{"class":284},[270,2962,409],{"class":280},[270,2964,650],{"class":284},[270,2966,409],{"class":280},[270,2968,655],{"class":284},[270,2970,409],{"class":280},[270,2972,725],{"class":284},[270,2974,288],{"class":280},[270,2976,285],{"class":365},[270,2978,2979],{"class":284},"(subq)))",[270,2981,310],{"class":280},[270,2983,2984],{"class":272,"line":503},[270,2985,349],{"emptyLinePlaceholder":348},[270,2987,2988,2990,2992,2994,2996,2998,3001,3003,3005,3008,3010,3012,3014],{"class":272,"line":528},[270,2989,1741],{"class":284},[270,2991,409],{"class":280},[270,2993,1746],{"class":365},[270,2995,369],{"class":284},[270,2997,307],{"class":280},[270,2999,3000],{"class":303},"Main query:",[270,3002,307],{"class":280},[270,3004,288],{"class":280},[270,3006,3007],{"class":284}," mainQuery",[270,3009,409],{"class":280},[270,3011,2917],{"class":365},[270,3013,2920],{"class":284},[270,3015,310],{"class":280},[270,3017,3018],{"class":272,"line":561},[270,3019,349],{"emptyLinePlaceholder":348},[270,3021,3022],{"class":272,"line":588},[270,3023,3024],{"class":608},"// Execute\n",[270,3026,3027,3029,3032,3034,3036,3038,3040,3042,3044],{"class":272,"line":1163},[270,3028,356],{"class":355},[270,3030,3031],{"class":284}," results ",[270,3033,362],{"class":280},[270,3035,689],{"class":276},[270,3037,3007],{"class":284},[270,3039,409],{"class":280},[270,3041,739],{"class":365},[270,3043,415],{"class":284},[270,3045,310],{"class":280},[243,3047,3048],{},"Subqueries and aggregates give you powerful tools for complex data analysis while maintaining type safety!",[3050,3051,3052],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":265,"searchDepth":313,"depth":313,"links":3054},[3055,3062,3068,3069,3070,3071],{"id":249,"depth":313,"text":250,"children":3056},[3057,3058,3059,3060,3061],{"id":257,"depth":345,"text":258},{"id":597,"depth":345,"text":598},{"id":765,"depth":345,"text":766},{"id":923,"depth":345,"text":924},{"id":1305,"depth":345,"text":1306},{"id":1588,"depth":313,"text":1589,"children":3063},[3064,3065,3066,3067],{"id":1595,"depth":345,"text":1596},{"id":1688,"depth":345,"text":1689},{"id":1804,"depth":345,"text":1805},{"id":2045,"depth":345,"text":2046},{"id":2125,"depth":313,"text":2126},{"id":2575,"depth":313,"text":2576},{"id":2621,"depth":313,"text":2622},{"id":2822,"depth":313,"text":2823},"Using subqueries and aggregate functions","md",null,{},{"title":229,"description":3072},"6wO3DD-mtYpHEVmQbjF8-6YutfAxCIyTva_UnVh6nKQ",[3079,3081],{"title":225,"path":226,"stem":227,"description":3080,"children":-1},"Debug your queries using .toSQL()",{"title":233,"path":234,"stem":235,"description":3082,"icon":236,"children":-1},"Quick reference for all ORM methods and functions",1773317304408]