Description
Table: Terms
+-------------+------+
| Column Name | Type |
+-------------+------+
| power | int |
| factor | int |
+-------------+------+
power is the primary key column for this table.
Each row of this table contains information about one term of the equation.
power is an integer in the range [0, 100].
factor is an integer in the range [-100, 100] and cannot be zero.
You have a very powerful program that can solve any equation of one variable in the world. The equation passed to the program must be formatted as follows:
- The left-hand side (LHS) should contain all the terms.
- The right-hand side (RHS) should be zero.
- Each term of the LHS should follow the format
"<sign><fact>X^<pow>"
where:<sign>
is either"+"
or"-"
.<fact>
is theabsolute value
of thefactor
.<pow>
is the value of thepower
. - If the power is
1
, do not add"^<pow>"
.
For example, ifpower = 1
andfactor = 3
, the term will be"+3X"
. - If the power is
0
, add neither"X"
nor"^<pow>"
.
For example, ifpower = 0
andfactor = -3
, the term will be"-3"
. - The powers in the LHS should be sorted in
descending order
.
Write an SQL query to build the equation.
SQL Schema
Create table If Not Exists Terms (power int, factor int)
Truncate table Terms
insert into Terms (power, factor) values ('2', '1')
insert into Terms (power, factor) values ('1', '-4')
insert into Terms (power, factor) values ('0', '2')
Idea
The query result format is in the following example.
+-----------------+
| equation |
+-----------------+
| -4X^4+1X^2-1X=0 |
+-----------------+
Fulfill requirements :
For generating the equation by records of table Terms
, it can be reorganize to a few parts of a term {factor sign}{absolute factor value}{power of X sign}{power value}
For example :
- Term will be present
-4X
when therecord.factor=-4
,record.power=1
- Term will be present
+2x^4
when therecord.factor=2
,record.power=4
- Term will be present
+1
when therecord.factor=1
,record.power=0
Finally, using the function group_concat()
combainating all of the terms from reorganize.
Solution
with
builder as (
select 0 as LHS, -1 as rk, '=0' as e
union
select
0 as LHS,
row_number() over(order by power) rk,
concat(
if(factor >0, '+', '-'), -- factor sign
abs(factor), -- remove factor sign of the value
if(power=0, '', if(power=1, 'X', 'X^') ), -- power of X
if(power<2, '', power) -- show power text when power large than 2
) e
from Terms
)
select
group_concat( e order by rk desc separator '' ) as equation
from builder
group by LHS