2022. 2. 17. 23:47ใ๊ฐ๋ ์ ๋ฆฌ ์์ ์ค/Data Base
๐ Code Content
๐ฝ Service.java
@Slf4j
@Service("junyharangSaleDailyStatisticService")
public class JunyHarangSaleDailyStatisticService implements LogicRepository {
@Autowired
JdbcQueryFactory query;
@Autowired
JunyHarangoctDao junyharangoctdao;
@Override
public List<Map<String, Object>> list(QueryContext context) {
Map<String,Object> data = context.getData();
if (data == null) {
throw new ApiException("500", "data is null");
}
int page = JsonUtils.getIntValue(data, "page");
int size = JsonUtils.getIntValue(data, "pageSize");
String period_fromto = JsonUtils.getStringValue(data, "period_fromto");
String channel_matching = JsonUtils.getStringValue(data, "channel_matching");
String from ="";
String to ="";
String sql = "";
int term = period_fromto.length();
if(term == 21){
if (!StringUtils.isEmpty(period_fromto)) {
String[] tmp = period_fromto.split("~");
from = tmp[0].replace("-","");
to = tmp[1].replace("-","");
}
sql = " SELECT a.* from( " +
" select to_char(to_date(a.sales_date, 'yyyyMMdd'), 'yyyy-MM-dd') period, " +
" a.sales_amt sales, " +
" a.pg_commission_amt pg_fee, " +
" a.company_settlement_amt store_settlement_amt, " +
" a.self_pay_coupun coupon, " +
" a.point , " +
" a.self_goods_deli_amt delivery_fee, " +
" a.tot_settlement_amt final_settlement_amt " +
" from tbl_stat_sales_cnt a " +
" WHERE 1=1 " +
" AND a.sales_date >= "+ from +" " +
" AND a.sales_date <= "+ to +" " ;
if (!("".equals(channel_matching) || channel_matching.isEmpty())) {
sql += " AND a.ord_channel IN( "+ channel_matching +" ) ";
}
sql += " UNION ALL " +
" select 'ํฉ๊ณ' period, " +
" nvl(sum(a.sales_amt),0) sales, " +
" nvl(sum(a.pg_commission_amt),0) pg_fee, " +
" nvl(sum(a.company_settlement_amt),0) store_settlement_amt, " +
" nvl(sum(a.self_pay_coupun),0) coupon, " +
" nvl(sum(a.point),0) point, " +
" nvl(sum(a.self_goods_deli_amt),0) delivery_fee, " +
" nvl(sum(a.tot_settlement_amt),0) final_settlement_amt " +
" from tbl_stat_sales_cnt a " +
" WHERE 1=1 " +
" AND a.sales_date >= "+ from +" " +
" AND a.sales_date <= "+ to +" " ;
if (!("".equals(channel_matching) || channel_matching.isEmpty())) {
sql += " AND a.ord_channel IN( "+ channel_matching +" ) ";
}
sql += " )a " +
" ORDER BY (CASE WHEN a.period = 'ํฉ๊ณ' THEN 2 ELSE 1 END), a.period DESC ";
}else {
if (!StringUtils.isEmpty(period_fromto)) {
String[] tmp = period_fromto.split("~");
from = tmp[0].replace("-","");
to = tmp[1].replace("-","");
}
sql = " SELECT a.* from( " +
" select to_char(to_date(a.sales_date, 'yyyyMMdd'), 'yyyy-MM') period, " +
" a.sales_amt sales, " +
" a.pg_commission_amt pg_fee, " +
" a.company_settlement_amt store_settlement_amt, " +
" a.self_pay_coupun coupon, " +
" a.point, " +
" a.self_goods_deli_amt delivery_fee, " +
" a.tot_settlement_amt final_settlement_amt " +
" from tbl_stat_sales_cnt a " +
" WHERE 1=1 " +
" AND SUBSTR(a.sales_date,-8,6) >= "+ from +" " +
" AND SUBSTR(a.sales_date,-8,6) <= "+ to +" " ;
if (!("".equals(channel_matching) || channel_matching.isEmpty())) {
sql += " AND a.ord_channel IN( "+ channel_matching +" ) ";
}
sql += " UNION ALL " +
" select 'ํฉ๊ณ' period, " +
" nvl(sum(a.sales_amt),0) sales, " +
" nvl(sum(a.pg_commission_amt),0) pg_fee, " +
" nvl(sum(a.company_settlement_amt),0) store_settlement_amt, " +
" nvl(sum(a.self_pay_coupun),0) coupon, " +
" nvl(sum(a.point),0) point, " +
" nvl(sum(a.self_goods_deli_amt),0) delivery_fee, " +
" nvl(sum(a.tot_settlement_amt),0) final_settlement_amt " +
" from tbl_stat_sales_cnt a " +
" WHERE 1=1 " +
" AND SUBSTR(a.sales_date,-8,6) >= "+ from +" " +
" AND SUBSTR(a.sales_date,-8,6) <= "+ to +" " ;
if (!("".equals(channel_matching) || channel_matching.isEmpty())) {
sql += " AND a.ord_channel IN( "+ channel_matching +" ) ";
}
sql += " )a " +
" ORDER BY (CASE WHEN a.period = 'ํฉ๊ณ' THEN 2 ELSE 1 END), a.period DESC ";
}
log.info("sql - " + sql);
List<Map<String, Object>> list = (List<Map<String, Object>>)query.list(sql, page, size, "zinSaleDailyStatistic").get("items");
return list;
}
@Override
public Map<String, Object> read(String id) {
return null;
}
@Override
public int create(Node node) {
return 0;
}
@Override
public int update(Node node) {
return 0;
}
@Override
public int delete(String id) {
return 0;
}
private void replaceFilterList(Map<String,Object> params, String filterKey, String listKey) {
List<String> filter = JsonUtils.getStringList(params, filterKey);
params.put(listKey, filter);
}
}
๐ฝ SQL๋ฌธ
SELECT * FROM (
SELECT ROWNUM AS RNUM, PL.*
FROM (
SELECT *
FROM (
SELECT a.*
from(
select to_char(to_date(a.sales_date, 'yyyyMMdd'), 'yyyy-MM') period, a.sales_amt sales, a.pg_commission_amt pg_fee, a.company_settlement_amt store_settlement_amt, a.self_pay_coupun coupon, a.point, a.self_goods_deli_amt delivery_fee, a.tot_settlement_amt final_settlement_amt
from tbl_stat_sales_cnt a
WHERE 1=1
AND SUBSTR(a.sales_date,-8,6) >= 202108
AND SUBSTR(a.sales_date,-8,6) <= 202202
UNION ALL
select 'ํฉ๊ณ' period, nvl(sum(a.sales_amt),0) sales, nvl(sum(a.pg_commission_amt),0) pg_fee, nvl(sum(a.company_settlement_amt),0) store_settlement_amt, nvl(sum(a.self_pay_coupun),0) coupon, nvl(sum(a.point),0) point, nvl(sum(a.self_goods_deli_amt),0) delivery_fee, nvl(sum(a.tot_settlement_amt),0) final_settlement_amt
from tbl_stat_sales_cnt a
WHERE 1=1
AND SUBSTR(a.sales_date,-8,6) >= 202108 AND SUBSTR(a.sales_date,-8,6) <= 202202 )a
ORDER BY (CASE WHEN a.period = 'ํฉ๊ณ' THEN 2 ELSE 1 END), a.period DESC )
WHERE ROWNUM <= 10 ) PL )
WHERE RNUM > 0;
โ ๏ธ ๋ฌธ์ ๋ฐ์!
์์ ๊ฒฐ๊ณผ์ ๊ฐ์ด PERIOD์ 2022-02 ์ปฌ๋ผ ๋ ๊ฐ๊ฐ ํฉ์ณ์ ธ์ ํ๋๋ก ๋์์ผ ํ๋๋ฐ, ๋ ๊ฐ๋ก ์ชผ๊ฐ์ ธ์ ๋์ค๋ ๊ฒ์ด์์.
๐ป ๋ฌธ์ ํด๊ฒฐ!
SELECT *
FROM (
select to_char(to_date(sales_date, 'yyyyMMdd'), 'yyyy-MM') period, sum(sales_amt) AS sales, sum(pg_commission_amt) AS pg_fee, sum(company_settlement_amt) AS store_settlement_amt, sum(self_pay_coupun) AS coupon, sum(point) AS point, sum(self_goods_deli_amt) AS delivery_fee, sum(tot_settlement_amt) AS final_settlement_amt
from tbl_stat_sales_cnt a
WHERE 1=1
AND SUBSTR(a.sales_date,-8,6) >= 202108
AND SUBSTR(a.sales_date,-8,6) <= 202202
GROUP BY to_char(to_date(a.sales_date, 'yyyyMMdd'), 'yyyy-MM')
);
๋จผ์ ์๋ธ ์ฟผ๋ฆฌ์ ์ ๋ ์ง๋ฅผ ์ ๋ ฅ ๋ฐ์ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ์์ ์ปฌ๋ผ๋ค์ ํฉ์ ๊ตฌํ๋ฉด ๋๋ค๊ณ ์๊ฐํ ๊ฒ์ด๊ณ , ๊ทธ๊ฒ์ ๋ฌถ์ด sales_date ์ปฌ๋ผ ๊ธฐ์ค์ผ๋ก ๋ฌถ์ด์ฃผ๋ฉด ์๊ฐํ ๊ฒ์ด์์. ๊ทธ๋์ ์์ ๊ฐ์ด Query ๋ฌธ์ ์์ฑํ๊ณ , DBeaver๋ฅผ ํตํด Testํ ๊ฒฐ๊ณผ ์ํ๋ ๊ฐ์ด ๋์จ ๊ฒ์ด์์.
SELECT * FROM (
SELECT ROWNUM AS RNUM, PL.*
FROM (
SELECT *
FROM (
SELECT a.*
from(
select to_char(to_date(sales_date, 'yyyyMMdd'), 'yyyy-MM') period, sum(sales_amt) AS sales, sum(pg_commission_amt) AS pg_fee, sum(company_settlement_amt) AS store_settlement_amt, sum(self_pay_coupun) AS coupon, sum(point) AS point, sum(self_goods_deli_amt) AS delivery_fee, sum(tot_settlement_amt) AS final_settlement_amt
from tbl_stat_sales_cnt a
WHERE 1=1
AND SUBSTR(a.sales_date,-8,6) >= 202108
AND SUBSTR(a.sales_date,-8,6) <= 202202
GROUP BY to_char(to_date(a.sales_date, 'yyyyMMdd'), 'yyyy-MM')
UNION ALL
select 'ํฉ๊ณ' period, nvl(sum(a.sales_amt),0) sales, nvl(sum(a.pg_commission_amt),0) pg_fee, nvl(sum(a.company_settlement_amt),0) store_settlement_amt, nvl(sum(a.self_pay_coupun),0) coupon, nvl(sum(a.point),0) point, nvl(sum(a.self_goods_deli_amt),0) delivery_fee, nvl(sum(a.tot_settlement_amt),0) final_settlement_amt
from tbl_stat_sales_cnt a
WHERE 1=1
AND SUBSTR(a.sales_date,-8,6) >= 202108 AND SUBSTR(a.sales_date,-8,6) <= 202202 )a
ORDER BY (CASE WHEN a.period = 'ํฉ๊ณ' THEN 2 ELSE 1 END), a.period DESC )
WHERE ROWNUM <= 10 ) PL )
WHERE RNUM > 0;
๊ธฐ์กด์ ์์๋ Query๋ฌธ์ ์ฃผ๋ํ๋์ด ์์ ํ ๋ถ๋ถ์ ์ดํฌ์ ์น์ด์ ๋ค์ Test๋ฅผ ํด ๋ณธ ๊ฒ์ด์์.
์ญ์๋ ์ํ๋ ๊ฐ์ด ๋์ค๊ฒ ๋์๊ณ , ์ด๊ฑธ Service์ ๋ค์ด ์๋ Query๋ฌธ์ ๋ค์ ์ดํฌ์ ์น์ด ์ค ๊ฒ์ด์์.
@Slf4j
@Service("junyharangSaleDailyStatisticService")
public class junyharangSaleDailyStatisticService implements LogicRepository {
@Autowired
JdbcQueryFactory query;
@Autowired
JunyharnagoctDao junyharangoctdao;
@Override
public List<Map<String, Object>> list(QueryContext context) {
Map<String,Object> data = context.getData();
if (data == null) {
throw new ApiException("500", "data is null");
}
int page = JsonUtils.getIntValue(data, "page");
int size = JsonUtils.getIntValue(data, "pageSize");
String period_fromto = JsonUtils.getStringValue(data, "period_fromto");
String channel_matching = JsonUtils.getStringValue(data, "channel_matching");
String from ="";
String to ="";
String sql = "";
int term = period_fromto.length();
if(term == 21){
if (!StringUtils.isEmpty(period_fromto)) {
String[] tmp = period_fromto.split("~");
from = tmp[0].replace("-","");
to = tmp[1].replace("-","");
}
sql = " SELECT a.* from( " +
" select to_char(to_date(a.sales_date, 'yyyyMMdd'), 'yyyy-MM-dd') period, " +
" a.sales_amt sales, " +
" a.pg_commission_amt pg_fee, " +
" a.company_settlement_amt store_settlement_amt, " +
" a.self_pay_coupun coupon, " +
" a.point , " +
" a.self_goods_deli_amt delivery_fee, " +
" a.tot_settlement_amt final_settlement_amt " +
" from tbl_stat_sales_cnt a " +
" WHERE 1=1 " +
" AND a.sales_date >= "+ from +" " +
" AND a.sales_date <= "+ to +" " ;
if (!("".equals(channel_matching) || channel_matching.isEmpty())) {
sql += " AND a.ord_channel IN( "+ channel_matching +" ) ";
}
sql += " UNION ALL " +
" select 'ํฉ๊ณ' period, " +
" nvl(sum(a.sales_amt),0) sales, " +
" nvl(sum(a.pg_commission_amt),0) pg_fee, " +
" nvl(sum(a.company_settlement_amt),0) store_settlement_amt, " +
" nvl(sum(a.self_pay_coupun),0) coupon, " +
" nvl(sum(a.point),0) point, " +
" nvl(sum(a.self_goods_deli_amt),0) delivery_fee, " +
" nvl(sum(a.tot_settlement_amt),0) final_settlement_amt " +
" from tbl_stat_sales_cnt a " +
" WHERE 1=1 " +
" AND a.sales_date >= "+ from +" " +
" AND a.sales_date <= "+ to +" " ;
if (!("".equals(channel_matching) || channel_matching.isEmpty())) {
sql += " AND a.ord_channel IN( "+ channel_matching +" ) ";
}
sql += " )a " +
" ORDER BY (CASE WHEN a.period = 'ํฉ๊ณ' THEN 2 ELSE 1 END), a.period DESC ";
}else {
if (!StringUtils.isEmpty(period_fromto)) {
String[] tmp = period_fromto.split("~");
from = tmp[0].replace("-","");
to = tmp[1].replace("-","");
}
sql = " SELECT a.* from( " +
" select to_char(to_date(a.sales_date, 'yyyyMMdd'), 'yyyy-MM-dd') period, " +
" sum(sales_amt) AS sales, " +
" sum(pg_commission_amt) AS pg_fee, " +
" sum(company_settlement_amt) AS store_settlement_amt, " +
" sum(self_pay_coupun) AS coupon, " +
" sum(point) AS point , " +
" sum(self_goods_deli_amt) AS delivery_fee, " +
" sum(tot_settlement_amt) AS final_settlement_amt " +
" from tbl_stat_sales_cnt a " +
" WHERE 1=1 " +
" AND SUBSTR(a.sales_date,-8,6) >= "+ from +" " +
" AND SUBSTR(a.sales_date,-8,6) <= "+ to +" " ;
if (!("".equals(channel_matching) || channel_matching.isEmpty())) {
sql += " AND a.ord_channel IN( "+ channel_matching +" ) ";
}
sql += " GROUP BY to_char(to_date(a.sales_date, 'yyyyMMdd'), 'yyyy-MM') " +
" UNION ALL " +
" select 'ํฉ๊ณ' period, " +
" nvl(sum(a.sales_amt),0) sales, " +
" nvl(sum(a.pg_commission_amt),0) pg_fee, " +
" nvl(sum(a.company_settlement_amt),0) store_settlement_amt, " +
" nvl(sum(a.self_pay_coupun),0) coupon, " +
" nvl(sum(a.point),0) point, " +
" nvl(sum(a.self_goods_deli_amt),0) delivery_fee, " +
" nvl(sum(a.tot_settlement_amt),0) final_settlement_amt " +
" from tbl_stat_sales_cnt a " +
" WHERE 1=1 " +
" AND SUBSTR(a.sales_date,-8,6) >= "+ from +" " +
" AND SUBSTR(a.sales_date,-8,6) <= "+ to +" " ;
if (!("".equals(channel_matching) || channel_matching.isEmpty())) {
sql += " AND a.ord_channel IN( "+ channel_matching +" ) ";
}
sql += " )a " +
" ORDER BY (CASE WHEN a.period = 'ํฉ๊ณ' THEN 2 ELSE 1 END), a.period DESC ";
}
log.info("sql - " + sql);
List<Map<String, Object>> list = (List<Map<String, Object>>)query.list(sql, page, size, "zinSaleDailyStatistic").get("items");
return list;
}
@Override
public Map<String, Object> read(String id) {
return null;
}
@Override
public int create(Node node) {
return 0;
}
@Override
public int update(Node node) {
return 0;
}
@Override
public int delete(String id) {
return 0;
}
private void replaceFilterList(Map<String,Object> params, String filterKey, String listKey) {
List<String> filter = JsonUtils.getStringList(params, filterKey);
params.put(listKey, filter);
}
}
'๊ฐ๋ ์ ๋ฆฌ ์์ ์ค > Data Base' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[H2-DB] Auto_Increment๋ฅผ ํ๊ณ ์ถ์ง๋ง, SQL Exception์ด ๋ฐ ๋ (0) | 2022.01.12 |
---|---|
[Data Base] Transaction (0) | 2021.10.05 |