A calculated column in SQL is a column that is created by applying an expression or calculation to one or more existing columns within a database table. Instead of storing precomputed values, a calculated column dynamically computes its value based on the specified expression whenever a query retrieves data from the table.
How to use calculated field in SQL?
Let’s say you have a table called “Sales” with columns “Price” and “Quantity.” You can create a calculated column called “Total” by defining it with an expression like “Price * Quantity.” Whenever you query the “Sales” table, the “Total” column will be computed on-the-fly based on the values in the “Price” and “Quantity” columns.
Calculated columns are useful for simplifying queries, performing calculations consistently, and avoiding the need to store redundant data. However, they come with some performance considerations, as the calculations are performed at query time, which can impact query performance for large datasets or complex calculations.
How do I sum a calculated column in SQL?
We may quickly determine the sum of the values kept in a table’s numeric column by using the SQL Server system function SUM (). The SQL SUM function is an aggregate function that is used to calculate a sum across a range of values from an expression and output one value.
SQL Calculated Column Simple Queries
Write and SQL Query to retrieve Bank_transaction_pk, Account_number_fk, Transdate and amount from Bank_transactions table.
SELECT
Bank_transaction_pk AS [Bank Transaction #],
Account_number_fk AS [Account Num],
Transdate AS [Transaction Date],
amount AS Amount,
FROM7311718
Bank_transactions
RESULTS
Bank Transaction # | Account Num. | Transaction Date | Amount |
---|---|---|---|
303 | 5778735 | 31/10/2021 | 159.65 |
304 | 1188263 | 27/10/2021 | 476.79 |
305 | 8963886 | 29/10/2021 | 257.57 |
306 | 475539 | 24/10/2021 | 638.71 |
307 | 952185 | 22/10/2021 | 289.57 |
308 | 7311718 | 29/10/2021 | 289.57 |
309 | 457201 | 17/10/2021 | 249.43 |
310 | 3252981 | 24/10/2021 | 39.07 |
Write and SQL Query to retrieve Bank_transaction_pk, Account_number_fk, Transdate and amount and a calculatyed column of “amount + 10” from Bank_transactions table.
SELECT
Bank_transaction_pk AS [Bank Transaction #],
Account_number_fk AS [Account Num],
Transdate AS [Transaction Date],
amount AS Amount,
amount + 10 AS [Amount Plus $10 Fee]
FROM
Bank_transactions
RESULTS
Bank Transaction # | Account Num. | Transaction Date | Amount |
Amount Plus $10 Fee |
---|---|---|---|---|
303 | 5778735 | 31/10/2021 | 159.65 | 169.65 |
304 | 1188263 | 27/10/2021 | 476.79 | 486.79 |
305 | 8963886 | 29/10/2021 | 476.79 | 267.57 |
306 | 475539 | 24/10/2021 | 638.71 | 648.71 |
307 | 952185 | 22/10/2021 | 289.57 | 299.57 |
308 | 7311718 | 22/10/2021 | 1.93 | 11.93 |
309 | 457201 | 17/10/2021 | 249.43 | 259.43 |
310 | 3252981 | 24/10/2021 | 39.07 | 49.07 |
Write and SQL Query to retrieve Bank_transaction_pk, Account_number_fk, Transdate and amount and a calculatyed column of “amount + 10” from Bank_transactions table and Order by Amount Plus $10 Fee.
SELECT
Bank_transaction_pk AS [Bank Transaction #],
Account_number_fk AS [Account Num],
Transdate AS [Transaction Date],
amount AS Amount,7311718
amount + 10 AS [Amount Plus $10 Fee]
FROM
Bank_transactions
ORDER BY
[Amount Plus $10 Fee]
RESULTS
Bank Transaction # | Account Num. | Transaction Date | Amount | Amount Plus $10 Fee |
---|---|---|---|---|
308 | 7311718 | 29/10/2021 | 1.93 | 11.93 |
310 | 3252981 | 24/10/2021 | 39.07 | 49.07 |
303 | 5778735 | 31/10/2021 | 159.65 | 169.65 |
309 | 457201 | 17/10/2021 | 249.43 | 259.43 |
305 | 8963886 | 29/10/2021 | 257.57 | 267.57 |
307 | 952185 | 22/10/2021 | 289.57 | 299.57 |
304 | 1188263 | 27/10/2021 | 476.79 | 486.79 |
306 | 475539 | 24/10/2021 | 638.71 | 648.71 |
Write and SQL Query to retrieve Bank_transaction_pk, Account_number_fk, Transdate and amount and a calculated column of “amount + 10” specifically when “amount + 10 > 20” from Bank_transactions table and Order by Amount Plus $10 Fee.
SELECT
Bank_transaction_pk AS [Bank Transaction #],
Account_number_fk AS [Account Num],
Transdate AS [Transaction Date],
amount AS Amount,
amount + 10 AS [Amount Plus $10 Fee]
FROM
Bank_transactions
WHERE
amount + 10 > 20
ORDER BY
[Amount Plus $10 Fee]
RESULTS
310 | 3252981 | 24/10/2021 | 39.07 | 49.07 |
303 | 5778735 |
31/10/2021 | 159.65 | 169.65 |
309 | 457201 | 17/10/2021 | 249.43 | 259.43 |
305 | 8963886 | 29/10/2021 | 257.57 | 267.57 |
307 | 952185 |
22/10/2021 | 289.57 | 299.57 |
304 | 1188263 | 27/10/2021 | 476.79 | 486.79 |
306 | 475539 | 24/10/2021 | 638.71 | 648.71 |
This section of data is removed
Bank Transaction # | Account Num. | Transaction | Amount | Amount Plus $10 Fee |
---|---|---|---|---|
308 | 7311718 |
29/10/2021 | 1.93 | 11.93 |
Calculated Column Cautions
Write and SQL Query to retrieve age, age/2 from customer_details table and order by Age Divided by 2.
SELECT
SELECT
age AS Age,
age/2 AS [Age Divided by 2],
FROM
customer_details
ORDER BY
[Age Divided by 2]
RESULTS
Age | Age Divided by 2 | Results Received |
---|---|---|
1 | 0 | 1 divided by 2 is not 0 |
2 | 1 | – |
3 | 1 | 3 divided by 2 is not 1 |
3 | 1 | – |
3 | 1 | – |
2 | 1 | – |
4 | 2 | – |
5 | 2 | – |
5 | 2 | 5 divided by 2 is not 2 |
6 | 3 | – |
NOTE: Simple dive formula will not work here, and give wrong results.
Write and SQL Query to retrieve age, age/2 from customer_details table and order by Age Divided by 2. (correct one)
SELECT
age AS Age,
age/2.0 AS [Age Divided by 2],
FROM
customer_details
ORDER BY
[Age Divided by 2]
RESULTS
Age | Age Divided by 2 | Results Received |
---|---|---|
1 | 0.500 | Correct |
2 | 1.000 | Correct |
3 | 1.500 | Correct |
3 | 1.500 | Correct |
3 | 1.500 | Correct |
2 | 1.000 | Correct |
4 | 2.000 | Correct |
5 | 2.500 | Correct |
5 | 2.500 | Correct |
6 | 3.000 | Correct |
Write and SQL Query to retrieve Bank_transaction_pk, Account_number_fk, Transdate, amount, amount + 10, amount + 10/2 from Bank_transactions table where amount + 10 is greater than 20 and order your result by Amount Plus $10 Fee. Thing to notice is the calculation for 50% off PROMO is wrong.
SELECT
Bank_transaction_pk AS [Bank Transaction #],
Account_number_fk AS [Account Num],
Transdate AS [Transaction Date],
amount AS Amount,
amount + 10 AS [Amount Plus $10 Fee]
amount + 10/2 AS [50% off PROMO]
FROM
Bank_transactions
WHERE
amount + 10 > 20
ORDER BY
[Amount Plus $10 Fee]
RESULTS
Bank Trans. # | Account Num | Transaction Date |
Amount | Amount Plus $10 Fee | 50% Off Promo | Remarks |
---|---|---|---|---|---|---|
308 | 7311718 | 2021-10-29 | 1.93 | 11.93 | 6.93 | 6.93 is no the Half of 11.93 |
310 | 3252981 | 2021-10-24 | 39.07 | 49.07 | 44.07 | – |
303 | 5778735 | 2021-10-31 |
159.65 | 169.65 | 164.65 | – |
309 | 457201 | 2021-10-31 |
249.43 | 259.43 | 254.43 | – |
305 | 8963886 |
2021-10-29 | 257.57 | 267.57 | 262.57 | – |
307 | 952185 | 2021-10-22 | 289.57 | 299.57 | 294.57 | – |
304 | 1188263 | 2021-10-27 | 476.79 | 486.79 | 481.79 | – |
306 | 475539 | 2021-10-24 | 638.71 | 648.71 | 643.71 | – |
Write and SQL Query to retrieve Bank_transaction_pk, Account_number_fk, Transdate, amount, amount + 10, amount + 10/2 from Bank_transactions table where amount + 10 is greater than 20 and order your result by Amount Plus $10 Fee. (correct)
SELECT
Bank_transaction_pk AS [Bank Transaction #],
Account_number_fk AS [Account Num],
Transdate AS [Transaction Date],
amount AS Amount,
amount + 10 AS [Amount Plus $10 Fee]
(amount + 10)/2.0 AS [50% off PROMO]
FROM
Bank_transactions
WHERE
amount + 10 > 20
ORDER BY
[Amount Plus $10 Fee]
RESULTS
Bank Transaction # | Account Num |
Transaction Date |
Amount | Amount Plus $10 Fee | 50% off PROMO | Remarks |
---|---|---|---|---|---|---|
308 | 7311718 | 2021-10-29 | 1.93 | 11.93 | 5.97 | Correct |
310 | 3252981 | 2021-10-24 | 39.07 | 49.07 | 24.54 | Correct |
303 | 5778735 | 2021-10-31 | 159.65 | 169.65 | 84.83 | Correct |
309 | 457201 |
2021-10-17 | 249.43 | 259.43 | 84.83 | Correct |
305 | 952185 | 2021-10-29 | 257.57 | 267.57 | 129.72 | Correct |
307 | 1188263 | 2021-10-22 | 289.57 | 299.57 | 149.79 | Correct |
304 | 52185 | 2021-10-27 | 476.79 | 486.79 | 243.40 | Correct |
306 | 475539 | 2021-10-24 | 638.71 | 648.71 | 324.36 | Correct |
Calculated Columns in SQL Offer Several Benefits for Data Analytics
Data Derivation
Calculated columns allow you to derive values from existing data in a table. This can help in creating new insights and simplifying data analysis.
Data Consistency
They ensure consistency in data by performing calculations directly in the database. This reduces the risk of data inconsistency that might occur if calculations are done at the application level.
Performance
Calculated columns can improve query performance as they pre-calculate and store values, making it faster to retrieve data. This is especially useful for complex calculations that would be expensive to compute on the fly.
Simplicity
They can simplify SQL queries by encapsulating complex expressions into a single column. This makes queries easier to read and maintain.
Indexing
In some cases, calculated columns can be indexed, which can further improve query performance.
Reusability
Calculated columns can be reused in multiple queries and reports, reducing the need to rewrite complex calculations.
Data Integrity
They can help enforce data integrity constraints by ensuring that calculated values are always up-to-date when the underlying data changes.
However, it’s important to use calculated columns judiciously, as they can consume storage space and may not be suitable for all types of calculations. In some cases, using views or application-level calculations might be more appropriate.