## Sum Preceding Rows Sql

1. Introduction to SUM Preceding Rows

In SQL, the SUM function is commonly used to calculate the total of a given column. However, there are instances when we need to calculate the sum for a range of preceding rows. This is where the SUM Preceding Rows function comes into play.

The SUM Preceding Rows function allows us to calculate a cumulative sum by summing up the values of a specific column from the preceding rows up to the current row. This can be extremely useful when analyzing data that requires a running total or cumulative aggregation.

2. Syntax and Usage of SUM Preceding Rows

The syntax for using SUM Preceding Rows is as follows:

“`

SELECT column_name, SUM(column_name) OVER (ORDER BY column_order ROWS BETWEEN UNBOUNDED PRECEDING AND current row) AS cumulative_sum

FROM table_name;

“`

Let’s break down the syntax:

– `SELECT column_name`: This specifies the column(s) you want to include in the result set.

– `SUM(column_name)` : This is the aggregate function that calculates the sum of the specified column.

– `OVER (ORDER BY column_order ROWS BETWEEN UNBOUNDED PRECEDING AND current row)`: This defines the window function that determines the range of preceding rows to consider for the sum.

Note: You can specify the column order based on which the sum should be calculated. It is essential to use an ORDER BY clause to ensure the correct order.

3. Calculating Cumulative Sum with Preceding Rows

To illustrate the calculation of a cumulative sum using preceding rows, consider the following example:

“`

SELECT sales_date, sales_amount,

SUM(sales_amount) OVER (ORDER BY sales_date ROWS BETWEEN UNBOUNDED PRECEDING AND current row) AS cumulative_sum

FROM sales_data;

“`

In this example, we have a sales_data table containing sales_date and sales_amount columns. By using the SUM Preceding Rows function, we can calculate the cumulative sum of sales_amount by specifying the ORDER BY sales_date.

4. Handling NULL Values in SUM Preceding Rows

When dealing with NULL values in the column for which the sum is calculated, the result can be affected. By default, the SUM function ignores NULL values. However, if you want to include NULL values in the sum, you can modify the syntax as follows:

“`

SELECT column_name, SUM(column_name) OVER (ORDER BY column_order ROWS BETWEEN UNBOUNDED PRECEDING AND current row IGNORE NULLS) AS cumulative_sum

FROM table_name;

“`

By adding the keyword “IGNORE NULLS,” the SUM function will consider NULL values in the calculation of the cumulative sum.

5. Performance Considerations and Optimization Techniques

Using the SUM Preceding Rows function can be resource-intensive, particularly when dealing with large datasets. To optimize performance, consider the following techniques:

– Use proper indexing: Ensuring that the columns used in the ORDER BY clause are properly indexed can significantly improve query performance.

– Limit the number of rows: If you only need to calculate the cumulative sum for a specific range rather than the entire dataset, consider using the ROWS BETWEEN X PRECEDING AND Y PRECEDING clause, where X and Y define the range of preceding rows to consider.

– Partitioning: If you want to calculate the cumulative sum within specific partitions of the data, you can use the PARTITION BY clause along with the OVER clause.

6. Use Cases and Examples of SUM Preceding Rows

The SUM Preceding Rows function can be used in various scenarios, such as:

– Financial Analysis: Calculating running balances, cumulative sales, or profits over time.

– Inventory Management: Tracking inventory levels by calculating cumulative stock movements.

– Statistical Analysis: Analyzing trends and patterns in data by computing cumulative sums.

Overall, the SUM Preceding Rows function provides a powerful tool for analyzing and aggregating data in SQL.

FAQs

1. What is the difference between ROWS BETWEEN UNBOUNDED PRECEDING AND current row and ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING?

– ROWS BETWEEN UNBOUNDED PRECEDING AND current row calculates the cumulative sum from the first row to the current row, while ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING calculates the sum of the previous row only.

2. How do I use SUM Preceding Rows in Hive?

– In Hive, you can use the Windowing function with the OVER clause to achieve the functionality of SUM Preceding Rows. The syntax and usage are similar to SQL. For example:

“`

SELECT column_name, SUM(column_name) OVER (ORDER BY column_order ROWS BETWEEN UNBOUNDED PRECEDING AND current row) AS cumulative_sum

FROM table_name;

“`

3. How do I use SUM Preceding Rows in Snowflake?

– In Snowflake, you can use the SUM function with the window frame specification to achieve the functionality of SUM Preceding Rows. For example:

“`

SELECT column_name, SUM(column_name) OVER (ORDER BY column_order ROWS BETWEEN UNBOUNDED PRECEDING AND current row) AS cumulative_sum

FROM table_name;

“`

4. Can I use the SUM Preceding Rows function with other window functions like AVG or MAX?

– Yes, you can combine the SUM Preceding Rows function with other window functions to perform more complex calculations. Just include the desired window function in the select statement with the appropriate syntax. For example:

“`

SELECT column_name, SUM(column_name) OVER (ORDER BY column_order ROWS BETWEEN UNBOUNDED PRECEDING AND current row) AS cumulative_sum,

AVG(column_name) OVER (ORDER BY column_order ROWS BETWEEN UNBOUNDED PRECEDING AND current row) AS average

FROM table_name;

“`

5. Can the SUM Preceding Rows function handle negative values?

– Yes, the SUM Preceding Rows function can handle negative values. It will sum up the preceding rows, regardless of the sign of the values.

### #Sql Interview Question – Calculate Running Total | Cumulative Sum | Unbounded Preceding Following

### Can You Sum Across A Row In Sql?

SQL, which stands for Structured Query Language, is a standard programming language used for managing and manipulating relational databases. One common task in SQL is performing calculations on data, such as summing up values. While summing up values across columns is straightforward, the question arises: Can you sum across a row in SQL?

The short answer is no, you cannot sum across a row in the traditional sense. In SQL, the aggregate function SUM is designed to calculate the sum of values in a column. It operates vertically, aggregating values from multiple rows into a single value. However, there are alternative ways to achieve a similar result and perform calculations across a row in SQL.

Performing Calculations Across a Row

To sum values across a row, you need to transpose the row into a column, allowing you to utilize the SUM function traditionally used vertically. One approach is to pivot the row, transforming it into a column by using the CASE statement along with an aggregate function.

Let’s consider an example to illustrate this concept. Suppose you have a table called “sales” with columns for different products and corresponding sales for each month. You want to calculate the total sales for each product across the year. Here’s a simplified version of the table:

“`

| Product | Jan | Feb | Mar | … | Dec |

|———–|——|——|——|—–|——|

| Product A | 100 | 80 | 120 | … | 90 |

| Product B | 150 | 70 | 60 | … | 100 |

| Product C | 200 | 150 | 80 | … | 110 |

“`

To sum the values across a row, you can use the following SQL query:

“`sql

SELECT Product, SUM(CASE WHEN Month = ‘Jan’ THEN Sales ELSE 0 END) AS Jan,

SUM(CASE WHEN Month = ‘Feb’ THEN Sales ELSE 0 END) AS Feb,

SUM(CASE WHEN Month = ‘Mar’ THEN Sales ELSE 0 END) AS Mar,

…

SUM(CASE WHEN Month = ‘Dec’ THEN Sales ELSE 0 END) AS Dec

FROM sales

GROUP BY Product;

“`

In this query, each CASE statement specifies which month to consider and conditionalizes it with the corresponding sales value. The SUM function then aggregates the sales for each month. Finally, the query groups the results by product, giving you the desired sum across each row.

Limitations and Considerations

While the aforementioned technique allows you to perform calculations across a row, it comes with some limitations. Firstly, the number of columns in the result is fixed and must be known in advance. Secondly, this approach requires manual modification of the query code whenever new months or attributes are added to the table. This lack of flexibility may make it cumbersome to adapt to changing data requirements.

Additionally, transposing rows into columns may not be the most efficient solution for large datasets. SQL databases are optimized for column-based aggregations and can handle a large number of rows more efficiently than columns. It is important to consider the performance implications and evaluate the trade-offs when using this approach.

Frequently Asked Questions (FAQs):

Q: Can you sum across a row without transposing it?

A: No, you cannot directly sum across a row in SQL without transposing it into a column. SQL’s aggregate function SUM is designed to operate vertically, aggregating values within a column, not across a row.

Q: Are there any alternative ways to achieve calculations across a row in SQL?

A: Yes, the alternative approach involves transposing the row into a column using the CASE statement and an aggregate function like SUM. However, this technique has limitations regarding the fixed number of columns and the need for manual code modification.

Q: Is transposing rows into columns an efficient solution for large datasets?

A: Transposing rows into columns may not be the most efficient solution, especially for large datasets. SQL databases are optimized for column-based operations and can handle a large number of rows more efficiently.

Q: How can I dynamically handle changes in the number of columns?

A: Handling dynamic column changes in SQL requires more complex techniques, such as dynamic SQL or procedural languages like PL/SQL or T-SQL. These techniques can help generate and execute SQL statements dynamically based on the structure of the data.

Q: Can I perform calculations across a row using other programming languages or tools?

A: Yes, other programming languages or tools, such as Python, R, or spreadsheet software like Microsoft Excel, provide more flexibility and direct methods to perform calculations across rows and columns.

In conclusion, while you cannot directly sum across a row in SQL, you can achieve similar calculations by transposing the row into a column using the CASE statement and an aggregate function like SUM. However, it is essential to consider the limitations and performance implications when using this technique.

### What Is Rows Between Unbounded Preceding And 1 Preceding?

When working with SQL window functions, it is common to come across the concept of “rows between unbounded preceding and 1 preceding.” This phrase represents a specific range of rows within a partition that a particular window function is applied to. In order to understand this concept better, let’s dive deeper into the definition, usage, and implications of this row specification in SQL.

Understanding Window Functions

Window functions in SQL operate on a set of rows from a query result, called a window frame, instead of individual rows. These functions provide a way to perform calculations across groups of related rows, offering powerful analytical capabilities to SQL developers.

Row specifications define the set of rows that a window function uses to perform its calculations. These specifications can be defined using various clauses, such as PARTITION BY, ORDER BY, and the rows between clause.

The Rows Between Clause

The rows between clause is an optional part of a window function that further refines the range of rows to be included in the calculation. It allows you to define a specific range of rows with boundaries relative to the current row. The two boundary keywords used in the clause are PRECEDING and FOLLOWING.

The keyword PRECEDING refers to the rows before the current row, while the keyword FOLLOWING refers to the rows after the current row. The number specified between these boundaries determines the number of rows to be included within the range.

The Unbounded Preceding Modifier

Rows between unbounded preceding and 1 preceding is a specific form of the rows between clause. The unbounded preceding modifier indicates that the starting point of the range is unbounded, i.e., it includes all rows from the beginning of the partition to the current row.

For example, if we have a partition of rows numbered from 1 to 10, and we use rows between unbounded preceding and 1 preceding, the range would include rows from the beginning of the partition (1) to the row just before the current row. So, for row 5, the range would be from row 1 to row 4.

Use Cases

Rows between unbounded preceding and 1 preceding finds its application in many scenarios. Let’s discuss a few common use cases:

1. Moving Averages: In financial analysis or time series data, it’s common to calculate moving averages to smooth out fluctuations. By using a window function with rows between unbounded preceding and 1 preceding, we can easily calculate a moving average by including all previous rows up until the row just before the current row.

2. Running Totals: Running totals are frequently used in reports or data analysis to observe cumulative values. With the help of rows between unbounded preceding and 1 preceding, we can calculate such running totals by summing up values from the beginning of the partition to the row just before the current row.

3. Ranking: Rows between unbounded preceding and 1 preceding can be beneficial for ranking operations as well. By using the ROW_NUMBER() function with such a row specification, we can generate a unique rank for each row in a partition based on their order.

FAQs

1. Can I use other modifiers with rows between unbounded preceding and 1 preceding?

Yes, you can use the FOLLOWING modifier in combination with the unbounded preceding modifier. For example, rows between unbounded preceding and 1 following would include all rows from the beginning of the partition to the row just after the current row.

2. Is the rows between unbounded preceding and 1 preceding inclusive or exclusive?

The range specified by rows between unbounded preceding and 1 preceding is exclusive. The starting point (unbounded preceding) includes all rows from the beginning of the partition, but the ending point (1 preceding) excludes the current row.

3. Can I use this row specification with any window function?

Yes, rows between unbounded preceding and 1 preceding can be used with any window function that supports the rows between clause. Popular window functions like SUM(), AVG(), ROW_NUMBER(), and RANK() can all utilize this row specification.

In conclusion, utilizing rows between unbounded preceding and 1 preceding allows you to define a range of rows in SQL window functions. This row specification is useful for calculations involving moving averages, running totals, and ranking. Understanding and applying this concept enhances your ability to leverage window functions to solve complex analytical problems efficiently.

Keywords searched by users: sum preceding rows sql Rows BETWEEN UNBOUNDED PRECEDING and current row, sql sum over, rows between unbounded preceding and current row hive, rows between 1 preceding and 1 preceding, over preceding sql, rows over sql, preceding unbounded, rows between unbounded preceding and current row snowflake

Categories: Top 96 Sum Preceding Rows Sql

See more here: nhanvietluanvan.com

## Rows Between Unbounded Preceding And Current Row

Window functions are a powerful feature in SQL that allow us to perform calculations across a set of rows in a query result. One of the most versatile and frequently used window functions is the ROWS BETWEEN UNBOUNDED PRECEDING and current row clause. In this article, we will explore how this clause works, its practical applications, and provide answers to some frequently asked questions about this topic.

Understanding the Syntax:

The ROWS BETWEEN UNBOUNDED PRECEDING and current row clause is part of the window frame specification in SQL. It allows us to create a frame that includes all rows from the beginning of the partition up to and including the current row. Let’s break down the syntax to gain a better understanding:

– ROWS: The keyword used to specify the range for the window frame.

– BETWEEN: Specifies the beginning and end of the frame.

– UNBOUNDED PRECEDING: Specifies that the frame starts from the first row of the partition.

– current row: References the current row being evaluated.

Together, these components define a window frame that spans from the first row of the partition up to and including the current row.

Practical Applications:

This window frame clause can be used in a variety of scenarios to perform calculations based on previous rows. Here are a few practical applications:

1. Cumulative Sum: The ROWS BETWEEN UNBOUNDED PRECEDING and current row clause is often used to calculate cumulative sums. For example, suppose we have a table that contains sales data with a date column. We can use this clause to calculate the cumulative sales up to each date, providing insights into the overall sales progression over time.

2. Running Averages: By utilizing the described window frame, we can easily compute the running average of a numerical column. This can be valuable in scenarios where we need to see the average value up to the current row to identify trends or deviations.

3. Ranking and Percentiles: The ROWS BETWEEN UNBOUNDED PRECEDING and current row clause can be used for ranking and percentile calculations. By ordering the rows appropriately and applying this window frame, we can determine the rank of a given row or calculate the percentile that a value falls into within the dataset.

4. Time Series Analysis: In time-series data, understanding the values’ growth or decline over time is essential. By employing this window frame clause, we can analyze the trend by looking at the past observations leading up to the current row.

Frequently Asked Questions:

Q: Can the window frame be used without the PARTITION BY clause?

A: Yes, it can. When the PARTITION BY clause is omitted, the window frame will span over the entire result set, treating it as a single partition.

Q: Are there other window frame clauses available in SQL?

A: Yes, SQL provides several other window frame clauses, such as ROWS BETWEEN x PRECEDING AND y FOLLOWING and RANGE BETWEEN x PRECEDING AND y FOLLOWING. Each clause has its specific use cases and allows for greater flexibility in calculating window functions.

Q: Is the ROWS BETWEEN UNBOUNDED PRECEDING and current row clause available in all database systems?

A: The availability of this clause depends on the specific database system being used. Most modern SQL database systems, such as PostgreSQL, MySQL, and Microsoft SQL Server, support this clause. However, always consult the documentation of the database system being used to be sure.

Q: Can I use the ROWS BETWEEN UNBOUNDED PRECEDING and current row clause with non-numeric columns?

A: No, this window frame clause is typically used with numeric columns to perform various calculations. It may not provide meaningful results when applied to non-numeric columns.

In conclusion, the ROWS BETWEEN UNBOUNDED PRECEDING and current row clause in SQL enables powerful calculations across a set of rows. By utilizing this clause, we can easily perform cumulative sums, running averages, ranking, and percentile calculations, as well as analyze time-series data. It is an essential tool in the toolbox of any SQL developer or data analyst looking to gain deeper insights from their data.

## Sql Sum Over

In the realm of SQL, the SUM function is widely used to calculate the total of a specific column in a table. However, when we need to go beyond a simple total and require a grand total or subtotals for specific groups or partitions in a dataset, SQL SUM OVER comes to the rescue. In this article, we will explore the concept of SQL SUM OVER, its syntax, usage scenarios, and answer frequently asked questions.

Understanding the Syntax:

The syntax for SQL SUM OVER is as follows:

SELECT column1, column2, …, SUM(column_name) OVER (PARTITION BY column_name) AS sum_column_name

FROM table_name

The SUM OVER function is an analytical or window function that operates on a set of rows defined by the PARTITION BY clause. It calculates the sum for each row in the defined partition, while preserving the original rows and no aggregation is performed.

Usage Scenarios:

1. Calculating Subtotals:

One common scenario where SQL SUM OVER is beneficial is when we need to calculate subtotals for different groups within a dataset. For example, if we have a sales table with columns for product, region, and sales amount, we can use SUM OVER to calculate the subtotal for each region.

2. Obtaining Running Totals:

Another useful application of SQL SUM OVER is to compute running or cumulative totals. This can be helpful when analyzing time series data or any data with a defined order. For instance, if we have an expense table with columns for date and cost, we can leverage SUM OVER to determine the total expenses accumulated up to a specific date.

3. Finding Percentages:

SQL SUM OVER is also handy for calculating the percentage of a specific column’s value compared to the sum of that column across all rows. This can provide valuable insights when evaluating the distribution or relative importance of individual data points within the dataset.

FAQs:

Q1. Can I use multiple columns with SUM OVER?

A1. Absolutely! SQL SUM OVER can work with multiple columns. Just include the additional columns in the SELECT clause, and if necessary, specify them in the PARTITION BY clause to group the data accordingly.

Q2. Is there a limit to the number of columns I can use with SUM OVER?

A2. There is no explicit limit on the number of columns you can use, but keep in mind that including too many columns may make the query more complex and potentially impact performance. It is better to strike a balance between functionality and simplicity.

Q3. Can I use SUM OVER with other aggregate functions like AVG or MIN?

A3. Yes, you can use SQL SUM OVER in combination with other aggregate functions like AVG, MIN, or MAX. This allows you to perform multiple calculations on the same set of rows, providing a comprehensive analysis of the data.

Q4. Are there any performance considerations when using SUM OVER?

A4. While SQL SUM OVER is a powerful tool, it can have an impact on performance, especially when dealing with large datasets. It is recommended to use proper indexing, limit the number of rows processed, and evaluate query optimization techniques to ensure efficient execution.

Q5. Can I use SUM OVER with a WHERE clause?

A5. Absolutely! You can combine SQL SUM OVER with a WHERE clause to filter the rows on which the sum is calculated. This can be useful when you only want to consider a subset of the data for the sum calculation.

In conclusion, SQL SUM OVER is a flexible and powerful function that goes beyond the traditional SUM function in SQL. It allows us to obtain subtotals, running totals, and percentages within a dataset, providing a comprehensive analysis of the underlying data. By understanding its syntax and utilizing it effectively, SQL developers can elevate their analytical capabilities and unlock valuable insights from their data.

## Rows Between Unbounded Preceding And Current Row Hive

What does rows between unbounded preceding and current row mean?

In Hive, rows between unbounded preceding and current row refers to a window frame that includes all rows from the start of the partition to the current row. The term ‘unbounded preceding’ means that there is no specific limit on the number of rows before the current row that should be included in the window frame. Essentially, it considers all rows that have come before the current row.

Usage of rows between unbounded preceding and current row:

Rows between unbounded preceding and current row is widely used in Hive queries for performing calculations and aggregations based on a window of rows. It allows users to access and manipulate rows that precede the current row within a defined partition. This feature is especially useful when calculating running totals, cumulative sums, averages, or any other functions that require referring to preceding rows.

Functionality and Syntax:

The functionality and syntax of rows between unbounded preceding and current row can be better understood through an example. Consider a table with the following data:

“`

+———+———+

| User ID | Amount |

+———+———+

| 1 | 100 |

| 1 | 150 |

| 1 | 200 |

| 2 | 50 |

| 2 | 300 |

| 3 | 100 |

+———+———+

“`

Suppose we want to calculate the cumulative sum of the ‘Amount’ column for each user. We can achieve this using rows between unbounded preceding and current row. The following query demonstrates the syntax:

“`

SELECT User_ID, Amount, SUM(Amount) OVER (PARTITION BY User_ID ORDER BY Amount ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS Cumulative_Sum

FROM table_name;

“`

The query above will create a cumulative_sum column that shows the sum of the ‘Amount’ column for each user, starting from the first row to the current row.

Common FAQs:

1. What is the difference between rows between unbounded preceding and current row and other window frame specs?

– Rows between unbounded preceding and current row includes all rows from the start of the partition to the current row. Other window frame specs like ‘rows between 1 preceding and current row’ or ‘rows between 1 preceding and 1 following’ consider a fixed number of rows before and/or after the current row.

2. Can I use rows between unbounded preceding and current row without a partition?

– No, the usage of rows between unbounded preceding and current row requires defining a partition clause. It operates on a specific partition of the data.

3. What is the performance impact of using rows between unbounded preceding and current row?

– The performance impact depends on the size of the window frame. If the window frame includes a large number of rows, it may impact query performance. However, Hive is optimized for handling window functions efficiently.

4. Are there any limitations of rows between unbounded preceding and current row?

– Rows between unbounded preceding and current row does not have any specific limitations. However, users should be aware of the overall performance implications and the size of the window frame they are operating on.

5. Can I use rows between unbounded preceding and current row with other window functions?

– Yes, rows between unbounded preceding and current row can be used in conjunction with other window functions like SUM, AVG, COUNT, etc. This combination allows users to perform complex calculations and aggregations over specified window ranges.

Conclusion:

In Hive, rows between unbounded preceding and current row is a valuable feature when it comes to window functions. It enables users to access and manipulate a range of rows within a defined partition. By using this functionality, users can easily calculate running totals, cumulative sums, averages, and more. Understanding the syntax and usage of rows between unbounded preceding and current row is crucial for efficient data analysis and processing in Hive.

FAQs:

Q1. What is the difference between rows between unbounded preceding and current row and other window frame specs?

A1. Rows between unbounded preceding and current row includes all rows from the start of the partition to the current row. Other window frame specs like ‘rows between 1 preceding and current row’ or ‘rows between 1 preceding and 1 following’ consider a fixed number of rows before and/or after the current row.

Q2. Can I use rows between unbounded preceding and current row without a partition?

A2. No, the usage of rows between unbounded preceding and current row requires defining a partition clause. It operates on a specific partition of the data.

Q3. What is the performance impact of using rows between unbounded preceding and current row?

A3. The performance impact depends on the size of the window frame. If the window frame includes a large number of rows, it may impact query performance. However, Hive is optimized for handling window functions efficiently.

Q4. Are there any limitations of rows between unbounded preceding and current row?

A4. Rows between unbounded preceding and current row does not have any specific limitations. However, users should be aware of the overall performance implications and the size of the window frame they are operating on.

Q5. Can I use rows between unbounded preceding and current row with other window functions?

A5. Yes, rows between unbounded preceding and current row can be used in conjunction with other window functions like SUM, AVG, COUNT, etc. This combination allows users to perform complex calculations and aggregations over specified window ranges.

### Images related to the topic sum preceding rows sql

## Found 42 images related to sum preceding rows sql theme

Article link: **sum preceding rows sql**.

Learn more about the topic sum preceding rows sql.

- SUM OVER () with Group by and preceding – Stack Overflow
- Running total to the previous row – sql server
- 5 Practical Examples of Using ROWS BETWEEN in SQL
- How to get the cumulative running total of rows with SQL
- SQL SUM | Intermediate SQL – Mode Analytics
- SQL: Rows between unbounded preceding – Burleson Consulting
- 5 Practical Examples of Using ROWS BETWEEN in SQL
- How to Sum Values of a Column in SQL? | LearnSQL.com
- ROWS BETWEEN UNBOUNDED PRECEDING AND …
- How to sum preceding rows with condition linked to original …
- Cumulative sum of previous rows – SQLServerCentral
- rows preceding – Sql And Me
- Understanding Cumulative Sum In Sql: A Comprehensive Guide
- SUM(y) OVER(ORDER BY x ROWS BETWEEN 1 …

See more: https://nhanvietluanvan.com/luat-hoc/