From f8b2dca3a3eba5c946d1c7e10281658cb99422e1 Mon Sep 17 00:00:00 2001 From: askiiart Date: Wed, 6 Mar 2024 20:04:46 -0600 Subject: [PATCH] Add chapter 2 and 4 labs for 2436 and database prog, respectively --- .clang-format | 9 ++ .vscode/launch.json | 33 +++++ labs/cosc-2436/4.14/C++/Node.h | 61 ---------- labs/cosc-2436/4.14/C++/SortedNumberList.h | 32 ----- labs/cosc-2436/4.14/C++/main.cpp | 67 ---------- labs/cosc-2436/chapter-4/C++/Node.h | 61 ++++++++++ .../C++/README.md} | 0 .../chapter-4/C++/SortedNumberList.h | 114 ++++++++++++++++++ labs/cosc-2436/chapter-4/C++/main.cpp | 67 ++++++++++ labs/cosc-2436/chapter-4/Python/Node.py | 31 +++++ labs/cosc-2436/chapter-4/Python/README.md | 78 ++++++++++++ .../chapter-4/Python/SortedNumberList.py | 63 ++++++++++ .../Python/__pycache__/Node.cpython-311.pyc | Bin 0 -> 1607 bytes .../SortedNumberList.cpython-311.pyc | Bin 0 -> 2688 bytes labs/cosc-2436/chapter-4/Python/main.py | 35 ++++++ .../lab-2/instructions.md | 102 ++++++++++++++++ labs/database-programming/lab-2/lab-2.sql | 73 +++++++++++ labs/excel-thing | Bin 0 -> 65726 bytes 18 files changed, 666 insertions(+), 160 deletions(-) create mode 100644 .clang-format create mode 100644 .vscode/launch.json delete mode 100644 labs/cosc-2436/4.14/C++/Node.h delete mode 100644 labs/cosc-2436/4.14/C++/SortedNumberList.h delete mode 100644 labs/cosc-2436/4.14/C++/main.cpp create mode 100644 labs/cosc-2436/chapter-4/C++/Node.h rename labs/cosc-2436/{4.14/C++/instructions.md => chapter-4/C++/README.md} (100%) create mode 100644 labs/cosc-2436/chapter-4/C++/SortedNumberList.h create mode 100644 labs/cosc-2436/chapter-4/C++/main.cpp create mode 100644 labs/cosc-2436/chapter-4/Python/Node.py create mode 100644 labs/cosc-2436/chapter-4/Python/README.md create mode 100644 labs/cosc-2436/chapter-4/Python/SortedNumberList.py create mode 100644 labs/cosc-2436/chapter-4/Python/__pycache__/Node.cpython-311.pyc create mode 100644 labs/cosc-2436/chapter-4/Python/__pycache__/SortedNumberList.cpython-311.pyc create mode 100644 labs/cosc-2436/chapter-4/Python/main.py create mode 100644 labs/database-programming/lab-2/instructions.md create mode 100644 labs/database-programming/lab-2/lab-2.sql create mode 100644 labs/excel-thing diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..1d793a1 --- /dev/null +++ b/.clang-format @@ -0,0 +1,9 @@ +BasedOnStyle: LLVM +IndentWidth: 4 +ColumnLimit: 120 +BreakBeforeBraces: Custom +BraceWrapping: + BeforeCatch: true + BeforeElse: true + BeforeLambdaBody: false + BeforeWhile: true diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..3165371 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,33 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "(gdb) Launch", + "type": "cppdbg", + "request": "launch", + "program": "/home/askiiart/Documents/compsci-notes-spring-2024/labs/cosc-2436/4.14/C++/output/main", + "args": [], + "stopAtEntry": false, + "cwd": "${fileDirname}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + }, + { + "description": "Set Disassembly Flavor to Intel", + "text": "-gdb-set disassembly-flavor intel", + "ignoreFailures": true + } + ] + } + + ], +} \ No newline at end of file diff --git a/labs/cosc-2436/4.14/C++/Node.h b/labs/cosc-2436/4.14/C++/Node.h deleted file mode 100644 index ccc63b4..0000000 --- a/labs/cosc-2436/4.14/C++/Node.h +++ /dev/null @@ -1,61 +0,0 @@ -#ifndef NODE_H -#define NODE_H - -class Node { -protected: - double data; - Node* next; - Node* previous; - -public: - // Constructs this node with the specified numerical data value. The next - // and previous pointers are each assigned nullptr. - Node(double initialData) { - data = initialData; - next = nullptr; - previous = nullptr; - } - - // Constructs this node with the specified numerical data value, next - // pointer, and previous pointer. - Node(double initialData, Node* nextNode, Node* previousNode) { - data = initialData; - next = nextNode; - previous = previousNode; - } - - virtual ~Node() { - } - - // Returns this node's data. - virtual double GetData() { - return data; - } - - // Sets this node's data. - virtual void SetData(double newData) { - data = newData; - } - - // Gets this node's next pointer. - virtual Node* GetNext() { - return next; - } - - // Sets this node's next pointer. - virtual void SetNext(Node* newNext) { - next = newNext; - } - - // Gets this node's previous pointer. - virtual Node* GetPrevious() { - return previous; - } - - // Sets this node's previous pointer. - virtual void SetPrevious(Node* newPrevious) { - previous = newPrevious; - } -}; - -#endif diff --git a/labs/cosc-2436/4.14/C++/SortedNumberList.h b/labs/cosc-2436/4.14/C++/SortedNumberList.h deleted file mode 100644 index 783df73..0000000 --- a/labs/cosc-2436/4.14/C++/SortedNumberList.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef SORTEDNUMBERLIST_H -#define SORTEDNUMBERLIST_H -#include "Node.h" - -class SortedNumberList { -private: - // Optional: Add any desired private functions here - -public: - Node* head; - Node* tail; - - SortedNumberList() { - head = nullptr; - tail = nullptr; - } - - // Inserts the number into the list in the correct position such that the - // list remains sorted in ascending order. - void Insert(double number) { - // Your code here - } - - // Removes the node with the specified number value from the list. Returns - // true if the node is found and removed, false otherwise. - bool Remove(double number) { - // Your code here (remove placeholder line below) - return false; - } -}; - -#endif diff --git a/labs/cosc-2436/4.14/C++/main.cpp b/labs/cosc-2436/4.14/C++/main.cpp deleted file mode 100644 index 8cb527a..0000000 --- a/labs/cosc-2436/4.14/C++/main.cpp +++ /dev/null @@ -1,67 +0,0 @@ -#include -#include -#include -#include "Node.h" -#include "SortedNumberList.h" -using namespace std; - -void PrintList(SortedNumberList& list); -vector SpaceSplit(string source); - -int main(int argc, char *argv[]) { - // Read the line of input numbers - string inputLine; - getline(cin, inputLine); - - // Split on space character - vector terms = SpaceSplit(inputLine); - - // Insert each value and show the sorted list's contents after each insertion - SortedNumberList list; - for (auto term : terms) { - double number = stod(term); - cout << "List after inserting " << number << ": " << endl; - list.Insert(number); - PrintList(list); - } - - /* - // Read the input line with numbers to remove - getline(cin, inputLine); - terms = SpaceSplit(inputLine); - - // Remove each value - for (auto term : terms) { - double number = stod(term); - cout << "List after removing " << number << ": " << endl; - list.Remove(number); - PrintList(list); - } - */ - - return 0; -} - -// Prints the SortedNumberList's contents, in order from head to tail -void PrintList(SortedNumberList& list) { - Node* node = list.head; - while (node) { - cout << node->GetData() << " "; - node = node->GetNext(); - } - cout << endl; -} - -// Splits a string at each space character, adding each substring to the vector -vector SpaceSplit(string source) { - vector result; - size_t start = 0; - for (size_t i = 0; i < source.length(); i++) { - if (' ' == source[i]) { - result.push_back(source.substr(start, i - start)); - start = i + 1; - } - } - result.push_back(source.substr(start)); - return result; -} diff --git a/labs/cosc-2436/chapter-4/C++/Node.h b/labs/cosc-2436/chapter-4/C++/Node.h new file mode 100644 index 0000000..4a563e8 --- /dev/null +++ b/labs/cosc-2436/chapter-4/C++/Node.h @@ -0,0 +1,61 @@ +#ifndef NODE_H +#define NODE_H + +class Node { +protected: + double data; + Node* next; + Node* previous; + +public: + // Constructs this node with the specified numerical data value. The next + // and previous pointers are each assigned nullptr. + Node(double initialData) { + data = initialData; + next = nullptr; + previous = nullptr; + } + + // Constructs this node with the specified numerical data value, next + // pointer, and previous pointer. + Node(double initialData, Node* nextNode, Node* previousNode) { + data = initialData; + next = nextNode; + previous = previousNode; + } + + virtual ~Node() { + } + + // Returns this node's data. + virtual double GetData() { + return data; + } + + // Sets this node's data. + virtual void SetData(double newData) { + data = newData; + } + + // Gets this node's next pointer. + virtual Node* GetNext() { + return next; + } + + // Sets this node's next pointer. + virtual void SetNext(Node* newNext) { + next = newNext; + } + + // Gets this node's previous pointer. + virtual Node* GetPrevious() { + return previous; + } + + // Sets this node's previous pointer. + virtual void SetPrevious(Node* newPrevious) { + previous = newPrevious; + } +}; + +#endif diff --git a/labs/cosc-2436/4.14/C++/instructions.md b/labs/cosc-2436/chapter-4/C++/README.md similarity index 100% rename from labs/cosc-2436/4.14/C++/instructions.md rename to labs/cosc-2436/chapter-4/C++/README.md diff --git a/labs/cosc-2436/chapter-4/C++/SortedNumberList.h b/labs/cosc-2436/chapter-4/C++/SortedNumberList.h new file mode 100644 index 0000000..58b5758 --- /dev/null +++ b/labs/cosc-2436/chapter-4/C++/SortedNumberList.h @@ -0,0 +1,114 @@ +#ifndef SORTEDNUMBERLIST_H +#define SORTEDNUMBERLIST_H +#include "Node.h" + +class SortedNumberList { + private: + // Optional: Add any desired private functions here + + /* + These traverse the list up/down from startingNode and updates the head/tail + + Less efficient than just doing it in the functions based off the stuff there, but this is a bit easier on my brain + than dealing with edge cases there. Maybe the compiler can optimize it a bit, idk, I don't feel like digging + into the assembly (well, not right now) + + Note: These used to be one function, UpdateHeadAndTail(), but I've split UpdateHead() and UpdateTail() into two + different functions in order to minimize the performance hit. + */ + void UpdateHead(Node *startingNode) { + Node *currentNode = startingNode; + while (currentNode->GetPrevious() != nullptr) { + currentNode = currentNode->GetPrevious(); + } + head = currentNode; + } + + void UpdateTail(Node *startingNode) { + Node *currentNode = startingNode; + while (currentNode->GetNext() != nullptr) { + currentNode = currentNode->GetNext(); + } + tail = currentNode; + } + + public: + Node *head; + Node *tail; + + SortedNumberList() { + head = nullptr; + tail = nullptr; + } + + // Inserts the number into the list in the correct position such that the + // list remains sorted in ascending order. + void Insert(double number) { + if (head == nullptr) { // handle being a new list with no data in it + // if (false) { + head = new Node(number); + tail = head; + } + else { // actually do anything interesting + Node *currentNode = head; + while (true) { + // needs debugging, if less than head, replaces head, if more, throws SIGSEGV (Address boundary error) + if (currentNode->GetData() <= number && + (currentNode->GetNext() == nullptr || currentNode->GetNext()->GetData() <= number)) { + Node *newNode = new Node(number, currentNode->GetNext(), currentNode); + if (newNode->GetNext() != nullptr) { + currentNode->SetNext(newNode); + } + else { + head = newNode; + } + + if (newNode->GetNext() != nullptr) { + newNode->GetNext()->SetPrevious(newNode); + } + else { + tail = newNode; + } + // I split these into 2 different functions so they *could* be more efficient, + // not so they *would* be more efficient :P + // UpdateHead(newNode); + // UpdateTail(newNode); + break; + } + currentNode = currentNode->GetNext(); + } + } + } + + // Removes the node with the specified number value from the list. Returns + // true if the node is found and removed, false otherwise. + bool Remove(double number) { + // deal with having an empty list + if (head == nullptr) { + return false; + } + else { + Node *currentNode = head; + while (currentNode != nullptr) { + if (currentNode->GetData() == number) { + // Change around the adjacent nodes to point to each other + // Gotta deal with being the start or ending node + // (next or prev being nullptr), though + if (currentNode->GetPrevious() != nullptr) { + currentNode->GetPrevious()->SetNext(currentNode->GetNext()); + } + if (currentNode->GetNext() != nullptr) { + currentNode->GetNext()->SetPrevious(currentNode->GetPrevious()); + } + UpdateHead(currentNode); + UpdateTail(currentNode); + return true; + } + currentNode = currentNode->GetNext(); + } + return false; + } + } +}; + +#endif diff --git a/labs/cosc-2436/chapter-4/C++/main.cpp b/labs/cosc-2436/chapter-4/C++/main.cpp new file mode 100644 index 0000000..f7686d3 --- /dev/null +++ b/labs/cosc-2436/chapter-4/C++/main.cpp @@ -0,0 +1,67 @@ +#include +#include +#include +#include "Node.h" +#include "SortedNumberList.h" +using namespace std; + +void PrintList(SortedNumberList& list); +vector SpaceSplit(string source); + +int main(int argc, char *argv[]) { + // Read the line of input numbers + string inputLine; + getline(cin, inputLine); + + // Split on space character + vector terms = SpaceSplit(inputLine); + + // Insert each value and show the sorted list's contents after each insertion + SortedNumberList list; + for (auto term : terms) { + double number = stod(term); + list.Insert(number); + cout << "List after inserting " << number << ": " << endl; + PrintList(list); + } + + /* + // Read the input line with numbers to remove + getline(cin, inputLine); + terms = SpaceSplit(inputLine); + + // Remove each value + for (auto term : terms) { + double number = stod(term); + cout << "List after removing " << number << ": " << endl; + list.Remove(number); + PrintList(list); + } + */ + + return 0; +} + +// Prints the SortedNumberList's contents, in order from head to tail +void PrintList(SortedNumberList& list) { + Node* node = list.head; + while (node) { + cout << node->GetData() << " "; + node = node->GetNext(); + } + cout << endl; +} + +// Splits a string at each space character, adding each substring to the vector +vector SpaceSplit(string source) { + vector result; + size_t start = 0; + for (size_t i = 0; i < source.length(); i++) { + if (' ' == source[i]) { + result.push_back(source.substr(start, i - start)); + start = i + 1; + } + } + result.push_back(source.substr(start)); + return result; +} diff --git a/labs/cosc-2436/chapter-4/Python/Node.py b/labs/cosc-2436/chapter-4/Python/Node.py new file mode 100644 index 0000000..a2fc60a --- /dev/null +++ b/labs/cosc-2436/chapter-4/Python/Node.py @@ -0,0 +1,31 @@ +class Node: + # Initializes this node with the specified numerical data value, next + # pointer, and previous pointer. + def __init__(self, initial_data, next_node=None, previous_node=None): + self.data = initial_data + self.next = next_node + self.previous = previous_node + + # Returns this node's data. + def get_data(self): + return self.data + + # Sets this node's data. + def set_data(self, new_data): + self.data = new_data + + # Gets this node's next pointer. + def get_next(self): + return self.next + + # Sets this node's next pointer. + def set_next(self, new_next): + self.next = new_next + + # Gets this node's previous pointer. + def get_previous(self): + return self.previous + + # Sets this node's previous pointer. + def set_previous(self, new_previous): + self.previous = new_previous diff --git a/labs/cosc-2436/chapter-4/Python/README.md b/labs/cosc-2436/chapter-4/Python/README.md new file mode 100644 index 0000000..ed103cb --- /dev/null +++ b/labs/cosc-2436/chapter-4/Python/README.md @@ -0,0 +1,78 @@ +# 4.16 LAB: Sorted number list implementation with linked lists - Python + +## Step 1: Inspect the Node.py file + +Inspect the class declaration for a doubly-linked list node in Node.py. Access Node.py by clicking on the orange arrow next to main.py at the top of the coding window. The Node class has three attributes: + +- a floating-point data value, +- a reference to the next node, and +- a reference to the previous node. + +Node.py is read only, since no changes are required. +Step 2: Implement the insert() method + +A class for a sorted, doubly-linked list is declared in SortedNumberList.py. Implement the SortedNumberList class's insert() method. The method must create a new node with the parameter value, then insert the node into the proper sorted position in the linked list. Ex: Suppose a SortedNumberList's current list is `23 → 47.25 → 86`, then `insert(33.5)` is called. A new node with data value 33.5 is created and inserted between 23 and 47.25, thus preserving the list's sorted order and yielding: `23 → 35.5 → 47.25 → 86` + +## Step 3: Test in develop mode + +Code in main() takes a space-separated list of numbers and inserts each into a SortedNumberList. The list is displayed after each insertion. Ex: If input is + +```txt +77 15 -42 63.5 +``` + +then output is: + +```txt +List after inserting 77: +77 +List after inserting 15: +15 77 +List after inserting -42: +-42 15 77 +List after inserting 63.5: +-42 15 63.5 77 +``` + +Try various program inputs, ensuring that each outputs a sorted list. + +## Step 4: Implement the remove() method + +Implement the SortedNumberList class's remove() method. The method takes a parameter for the number to be removed from the list. If the number does not exist in the list, the list is not changed and false is returned. Otherwise, the first instance of the number is removed from the list and true is returned. + +Uncomment the commented-out part in main() that reads a second input line and removes numbers from the list. Test in develop mode to ensure that insertion and removal both work properly, then submit code for grading. + +Ex: If input is + +```txt +84 72 19 61 +19 84 +``` + +then output is: + +```txt +List after inserting 84: +84 +List after inserting 72: +72 84 +List after inserting 19: +19 72 84 +List after inserting 61: +19 61 72 84 +List after removing 19: +61 72 84 +List after removing 84: +61 72 +``` + +--- + +```txt +PASS: Inserting 25.5 yields ( 25.5 ) +PASS: Inserting 75.75 yields ( 25.5, 75.75 ) +PASS: Inserting 88.5 yields ( 25.5, 75.75, 88.5 ) +FAIL: Insert 30: +Expected list: ( 25.5, 30, 75.75, 88.5 ) +Actual list: ( 30, 75.75, 88.5 ) +``` diff --git a/labs/cosc-2436/chapter-4/Python/SortedNumberList.py b/labs/cosc-2436/chapter-4/Python/SortedNumberList.py new file mode 100644 index 0000000..51c3329 --- /dev/null +++ b/labs/cosc-2436/chapter-4/Python/SortedNumberList.py @@ -0,0 +1,63 @@ +from Node import Node + + +class SortedNumberList: + def __init__(self): + self.head = None + self.tail = None + + # Inserts the number into the list in the correct position such that the + # list remains sorted in ascending order. + def insert(self, number): + if self.head == None: + self.head = Node(number) + self.tail = self.head + else: + current_node = self.head + new_node = Node(number) + while True: + # handles most stuff + # probably got an error cuz this is confusing + if current_node != None and current_node.get_data() >= number: + new_node.set_next(current_node) + new_node.set_previous(current_node.get_previous()) + + if new_node.get_previous() != None: + new_node.get_previous().set_next(new_node) + else: + self.head = new_node + + current_node.set_previous(new_node) + break + + # handles being at the end + if current_node == None: + self.tail.set_next(new_node) + new_node.set_previous(self.tail) + self.tail = new_node + break + + current_node = current_node.get_next() + + # Removes the node with the specified number value from the list. Returns + # True if the node is found and removed, False otherwise. + def remove(self, number): + current_node = self.head + while True and current_node != None: + if current_node.get_data() == number: + next_node = current_node.get_next() + previous_node = current_node.get_previous() + if next_node != None: + next_node.set_previous(previous_node) + else: + self.tail = previous_node + + if previous_node != None: + previous_node.set_next(next_node) + else: + self.head = next_node + return True + + current_node = current_node.get_next() + + return False diff --git a/labs/cosc-2436/chapter-4/Python/__pycache__/Node.cpython-311.pyc b/labs/cosc-2436/chapter-4/Python/__pycache__/Node.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..04378d1fb06740fd0322e3eede5362cc47afa1ab GIT binary patch literal 1607 zcmbVM&rcIU6rS1LmMv*j1hp!Vnt*W+bqNwpjPYdRtuf)&%VgadVYS^YGg}o>6Jj`U z;Lcy5hWO8LBzra9YwC%U@6C2<3&sRy({J9JAMbtNo0)#ARHg~EFE@UQEt`-Z=$PgV zjX@2JLt>Gagp)nO=~s)8@9@i8lW=RDcy?$8us5@Vr{EkCL7J44ro~I#+M`XI+k2$x za0jr!3xGvl1f1eifG&3dOPoT~>C9;)Tr@&M#smklWU!)x_h^qW9M`R9fk#K44W1zb z^w-G|ZFqL(@E{E`Cl(*m%86ItFXSh z_UN%6ZU&uH$oiW9YCGLbVjp!s>}+Q)V@QXwor)eZE+$uZ0d~pBTy5VuD4onL=&rg9 zU1cA>0oEZLRRbKfb?vT!aY%aPE%bR?C$a$65tYTfD?z7lLrqoyGj~Izx+Fs;#>Fc% zKmaCJXAicI-Kx9_Za6ADIB4s{b6`N?i9^GK(aGfu%zBo@)R`NL4?3U1%{9Y9O|mfV z6<9Mso>-50EW|#1IgtxjU<%^M>j3BU<7F7rk1np0DC^Ry@4)5>)fo1?>apCY8r_?i zwmQmvVWBQ=Ju9?~Cu^?y&Wyfx<3mVS{XOtc$L{>4rPm;qkzU3FH+d)Imr<{o88R9l zT0};}!>=xx>#s?9R-*y`Bk+vkpe-27rWtD|yxT&%%-B{pXyr2!uaKNYxP^d^OJZbs z4`B)5C_iKU9wc684On&c8DMwx^^11lexFQ2nHFyM$p~CpSU`6O;QoL1%;II-dls~0 wO{(G1oZ$nciSJRfK6Rhv>Yqyw#x(UOVDxQDY2R9;5b-?x!m;1~n9za$0J!>2m;e9( literal 0 HcmV?d00001 diff --git a/labs/cosc-2436/chapter-4/Python/__pycache__/SortedNumberList.cpython-311.pyc b/labs/cosc-2436/chapter-4/Python/__pycache__/SortedNumberList.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..28d1f60f0d6bfc5be4d0cf14634b32a5b5aad58a GIT binary patch literal 2688 zcma)8O>7fK6rNqLgH0S6>IrLPBX6k*aj>yTOoBzJL=w_Q3Q;Ah9->N?@h-&0Kk4k6 z0&*k{9DK;Zl_HT=IanMZ2o6Y+EI^u(z%v+>r>Pn+@X^P8D( z-h1*P(Juuyy z^5TeOh{aQ2!Elq?@b7&!{Z0Qa*X`t{;-a{<(GbzbvkM{Gh>N@6;>$rNOrQ{P*Gj;3ZbyxZMWxfNUM0 zpBkQa?+UuJL}{>tkuv}z>6!r;MYf0bkCFbM$3v_gW0kwFaqRsV_#^h>+3&r2qTv}h z3-*Y;9au?EhveHi?Hl-{+><-5_aigeXKR1NG+x(}6Gi*P|L1+3Z800C5kV$=2v;9~ z$o)WmENtI>Ny&=^rC|GHtW~8)iX9-@8j>ECYIWHT5QN*Kc!ElBh?F#Ys7gzQ9Vpfj z!W_<5aVfHWRq1=G$>eGYxS?T+E>&d-DNpzVd~_xVNM6EZ!E783ZsfK&eK@KPN8g2` zTVMYe*bX%3Hx{jMblXpqCjN9HvF%)Q=^Y>0TKJ){*=T;zWzUSvbcX;G+F3nxQ4L+( zSu&G1_2f-0IcFs2etW1VZ>!1M7L1zkf(|dV%Nm?A;FJod=vYFBiJhc5F{e+=X%n}M ziCY?6FyMj;7dm{*a_%*d;TT)ni#LHf_YFTY>i}oC`F9vpP`4$oZ3ZSH!6v ztYYhIUoCloYl&OAFy3v0%*M6E;ldimyEoJYV`UJ(?m1qKTIU)bm;YyutW(^6reJP! znA>ixYH)p4xWlVR;{eb1R|t{8Rrz@P>&xNKFGLpqRC|`cT1cF5*cZeJK_MbOBH}a= zgpBAE76~uq6(T=LXcP=sBXM+5{kblPllZ%gR zK5hmq{*$(%^Oscqk`;`Y!MGlbYr!!iIJPsU2Qz9gV@1c!=oLMBMT<@u(W#c-5|XBn z(}kQSTsMU4tr05}ZF71ku7=_kJZHiQ9Zu}r&|uDhIh8&gAw_OzCnU7z_0YH)8n@ub zd%&CquNv^GN}rC9pjVlXw3JTdq8Z8Pk&G6ZG$NDDrEUy_=D1dj4cp@TLyaseJElY?bk_u9-= 20 +ORDER BY TotalOrders DESC, CustomerID + +-- Scenario 6 +WITH + Results + AS + ( + SELECT TOP 50 + ol.StockItemID, SUM(Quantity) TotalQuantity + FROM Sales.OrderLines ol + JOIN Warehouse.StockItems si ON ol.StockItemID = si.StockItemID + GROUP BY ol.StockItemID + ORDER BY TotalQuantity DESC + ) +SELECT Results.StockItemID, StockItemName, TotalQuantity +FROM Results JOIN Warehouse.StockItems ON WareHouse.Stockitems.StockItemID = Results.StockItemID +ORDER BY TotalQuantity DESC + +-- Scenario 7 +WITH + Results + AS + ( + SELECT cu.CustomerID, COUNT(OrderID) OrderCount + FROM Sales.Customers cu + LEFT JOIN Sales.Orders od ON cu.CustomerID = od.CustomerID + GROUP BY cu.CustomerID + ) +SELECT TOP 10 + Results.CustomerID, CustomerName, OrderCount +FROM Results + JOIN Sales.Customers ON Results.CustomerID = Sales.Customers.CustomerID + +-- Scenario 8 +SELECT DeliveryMethodID +FROM Application.DeliveryMethods +WHERE DeliveryMethodID NOT IN (SELECT DeliveryMethodID +FROM Sales.Customers) +ORDER BY DeliveryMethodName \ No newline at end of file diff --git a/labs/excel-thing b/labs/excel-thing new file mode 100644 index 0000000000000000000000000000000000000000..b3c908ce42f7d55196f445a401b0666a5c02190e GIT binary patch literal 65726 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