概要
SQLコンテストに参加したため、結果・感想・解答例を記載いたします。
初級問題しか出題されないため、ひらめきや技術力よりもタイピングや問題文の理解の速さを問われていたように感じます。
感想
結果
合計得点 | 解答時間 | 誤答数 |
---|---|---|
80 / 80 | 22分26秒 / 60分 | 4 |
回答時間
1位との解答時間差が12分あるため、かなりへこんでいます。
自己評価としては、問題内容が難しいというより問題文の見落としによるタイムロスがほとんどであったためあと5分程は詰められたはずです。
後日、再度同じ問題に取り組むことで何が足りていないか洗い出そうと思います。
誤答数
同順位帯で最も誤答数が多いですが、このコンテストは誤答によるペナルティが存在しません。
速度重視でとりあえず提出するようにしていたため気にしないようにしています。
(勿論誤答なんて無いほうがよいですが。。)
回答例
問題1
select
ITEM_POPULAR_RANK as RANK,
ITEM_CODE as CODE,
ITEM_NAME as NAME,
RECOMMEND_ITEM_RANK as RCM_RANK
from
ITEM
order by
ITEM_POPULAR_RANK asc,
ITEM_CODE desc;
問題文に「ただし、人気順位は同一順位も存在するものとする。」と記載されていますが、RANK関数を使用するわけではないです。
ミスリードを誘っているように感じました。
問題2
select
CUST_CODE as CODE,
CUST_NAME as NAME,
CUST_USER_NAME as USER_NAME
from
CUSTOMER
where
CUST_NAME like '株式会社%'
or CUST_NAME like '%商事%'
order by
CUST_CODE desc;
前方一致と部分一致の使い分けができるか問われていると感じました。
問題3
select
s.SALES_DATE as SAL_DATE,
s.SALES_NO as NO,
d.ITEM_CODE as ITEM_CODE,
d.SALES_QTY as SAL_QTY,
d.DELIVERED_QTY as DEL_QTY,
case when d.DELIVERED_QTY = 0
then '未出荷'
else case when d.SALES_QTY > d.DELIVERED_QTY
then '一部出荷'
else '出荷済'
end
end as SHIP_STS
from
SALES s
inner join SALES_DTL d
on d.SALES_NO = s.SALES_NO
where
s.SALES_DATE between '2024-04-01' and '2024-04-10'
order by
s.SALES_DATE desc,
s.SALES_NO asc,
d.ITEM_CODE asc;
CASE式の書き方を思い出しながらどうにか回答しました。
今見直すと下記の方が良かったです。
case when d.DELIVERED_QTY = 0
then '未出荷'
when d.SALES_QTY > d.DELIVERED_QTY
then '一部出荷'
else '出荷済'
end as SHIP_STS
問題4
select
d.ITEM_CODE as CODE,
i.ITEM_NAME as NAME,
sum(d.ORDER_QTY) as SUM_QTY
from
ORDERS o
inner join ORDERS_DTL d
on d.ORDER_NO = o.ORDER_NO
inner join WAREHOUSE w
on w.WH_CODE = o.WH_CODE
left join item i
on i.item_code = d.item_code
where
w.WH_NAME = '浦和倉庫'
group by
d.ITEM_CODE
having sum(d.ORDER_QTY) >= 50
order by
SUM_QTY desc,
CODE desc;
「集計した数量が50個以上となる商品を表示すること。」という問題文を見逃し2度誤答しました。
問題ページに記載されている表示フォーマットは正解例に近い状態であるため、提出前にコードテストを行うことでミスに気付けると思いました。
次回以降活用しようと思います。
次回予定
次回は6月21日(金)12時~6月24日(月)12時の間で第13回SQLコンテストが開催されます。
平日の日中から開催されるため、私は会社から帰宅後の参加になりそうです。
すこしでも順位を上げられるよう予習、復習を頑張ります。