import%20marimo%0A%0A__generated_with%20%3D%20%220.23.16%22%0Aapp%20%3D%20marimo.App(width%3D%22full%22)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20duckdb%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20import%20pandas%20as%20pd%0A%0A%20%20%20%20return%20mo%2C%20pd%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%20SQL%20%E3%83%87%E3%83%A2%20(marimo%20%2B%20DuckDB)%0A%0A%20%20%20%20marimo%20%E3%81%AF%20SQL%20%E3%82%BB%E3%83%AB%E3%82%92%E3%83%8D%E3%82%A4%E3%83%86%E3%82%A3%E3%83%96%E3%81%AB%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E3%82%BB%E3%83%AB%E5%86%85%E3%81%A7%20%60mo.sql(%22...%22)%60%20%E3%82%92%E5%91%BC%E3%81%B6%E3%81%A8%E3%80%81%E3%81%9D%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%8C%20SQL%20%E3%82%BB%E3%83%AB%E3%81%A8%E3%81%97%E3%81%A6%E6%89%B1%E3%82%8F%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20Python%20%E3%81%AE%E5%A4%89%E6%95%B0(%E3%83%87%E3%83%BC%E3%82%BF%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0)%E3%82%92%20SQL%20%E3%81%8B%E3%82%89%E7%9B%B4%E6%8E%A5%E5%8F%82%E7%85%A7%E3%81%A7%E3%81%8D%E3%82%8B%0A%20%20%20%20-%20UI%20%E8%A6%81%E7%B4%A0%E3%81%AE%E5%80%A4%E3%82%92%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%AB%E5%9F%8B%E3%82%81%E8%BE%BC%E3%82%80%E3%81%A8%E3%80%81%E5%A4%89%E6%9B%B4%E3%81%AB%E5%BF%9C%E3%81%98%E3%81%A6%E8%87%AA%E5%8B%95%E5%86%8D%E5%AE%9F%E8%A1%8C%E3%81%95%E3%82%8C%E3%82%8B%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(pd)%3A%0A%20%20%20%20customers%20%3D%20pd.DataFrame(%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22customer_id%22%3A%20%5B1%2C%202%2C%203%2C%204%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%5B%22%E4%BD%90%E8%97%A4%22%2C%20%22%E9%88%B4%E6%9C%A8%22%2C%20%22%E9%AB%98%E6%A9%8B%22%2C%20%22%E7%94%B0%E4%B8%AD%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22region%22%3A%20%5B%22%E9%96%A2%E6%9D%B1%22%2C%20%22%E9%96%A2%E8%A5%BF%22%2C%20%22%E9%96%A2%E6%9D%B1%22%2C%20%22%E4%B9%9D%E5%B7%9E%22%5D%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20)%0A%0A%20%20%20%20orders%20%3D%20pd.DataFrame(%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22order_id%22%3A%20%5B101%2C%20102%2C%20103%2C%20104%2C%20105%2C%20106%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22customer_id%22%3A%20%5B1%2C%202%2C%201%2C%203%2C%202%2C%204%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22amount%22%3A%20%5B1200%2C%203500%2C%20800%2C%205200%2C%20900%2C%202100%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22category%22%3A%20%5B%22%E9%A3%9F%E5%93%81%22%2C%20%22%E5%AE%B6%E9%9B%BB%22%2C%20%22%E9%A3%9F%E5%93%81%22%2C%20%22%E5%AE%B6%E9%9B%BB%22%2C%20%22%E6%9B%B8%E7%B1%8D%22%2C%20%22%E5%AE%B6%E9%9B%BB%22%5D%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20)%0A%20%20%20%20return%20customers%2C%20orders%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E3%82%AF%E3%82%A8%E3%83%AA1%3A%20Python%20%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%82%92%20SQL%20%E3%81%8B%E3%82%89%E7%9B%B4%E6%8E%A5%E5%8F%82%E7%85%A7%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo%2C%20orders)%3A%0A%20%20%20%20query1%20%3D%20mo.sql(%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20SELECT%20category%2C%20COUNT(*)%20AS%20num_orders%2C%20SUM(amount)%20AS%20total%0A%20%20%20%20FROM%20orders%0A%20%20%20%20GROUP%20BY%20category%0A%20%20%20%20ORDER%20BY%20total%20DESC%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E3%82%AF%E3%82%A8%E3%83%AA2%3A%20%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E7%B5%90%E5%90%88%20(JOIN)%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(customers%2C%20mo%2C%20orders)%3A%0A%20%20%20%20query2%20%3D%20mo.sql(%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20SELECT%20o.order_id%2C%20c.name%2C%20c.region%2C%20o.category%2C%20o.amount%0A%20%20%20%20FROM%20orders%20o%0A%20%20%20%20JOIN%20customers%20c%20ON%20o.customer_id%20%3D%20c.customer_id%0A%20%20%20%20ORDER%20BY%20o.amount%20DESC%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E3%82%AF%E3%82%A8%E3%83%AA3%3A%20UI%20%E8%A6%81%E7%B4%A0%E3%81%A7%E6%9D%A1%E4%BB%B6%E3%82%92%E5%8B%95%E7%9A%84%E3%81%AB%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20region_selector%20%3D%20mo.ui.dropdown(%0A%20%20%20%20%20%20%20%20options%3D%5B%22%E5%85%A8%E5%9C%B0%E5%9F%9F%22%2C%20%22%E9%96%A2%E6%9D%B1%22%2C%20%22%E9%96%A2%E8%A5%BF%22%2C%20%22%E4%B9%9D%E5%B7%9E%22%5D%2C%0A%20%20%20%20%20%20%20%20value%3D%22%E5%85%A8%E5%9C%B0%E5%9F%9F%22%2C%0A%20%20%20%20%20%20%20%20label%3D%22%E5%9C%B0%E5%9F%9F%E3%82%92%E9%81%B8%E6%8A%9E%22%2C%0A%20%20%20%20)%0A%20%20%20%20min_amount%20%3D%20mo.ui.number(%0A%20%20%20%20%20%20%20%20value%3D0%2C%20start%3D0%2C%20stop%3D5000%2C%20step%3D100%2C%20label%3D%22%E6%9C%80%E4%BD%8E%E9%87%91%E9%A1%8D%22%0A%20%20%20%20)%0A%20%20%20%20return%20min_amount%2C%20region_selector%0A%0A%0A%40app.cell%0Adef%20_(min_amount%2C%20mo%2C%20region_selector)%3A%0A%20%20%20%20mo.hstack(%5Bregion_selector%2C%20min_amount%5D%2C%20justify%3D%22start%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(customers%2C%20min_amount%2C%20mo%2C%20orders%2C%20region_selector)%3A%0A%20%20%20%20query3%20%3D%20mo.sql(%0A%20%20%20%20%20%20%20%20f%22%22%22%0A%20%20%20%20SELECT%20o.order_id%2C%20c.name%2C%20c.region%2C%20o.category%2C%20o.amount%0A%20%20%20%20FROM%20orders%20o%0A%20%20%20%20JOIN%20customers%20c%20ON%20o.customer_id%20%3D%20c.customer_id%0A%20%20%20%20WHERE%20o.amount%20%3E%3D%20%7Bmin_amount.value%7D%0A%20%20%20%20%20%20AND%20('%7Bregion_selector.value%7D'%20%3D%20'%E5%85%A8%E5%9C%B0%E5%9F%9F'%20OR%20c.region%20%3D%20'%7Bregion_selector.value%7D')%0A%20%20%20%20ORDER%20BY%20o.amount%20DESC%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E3%82%AF%E3%82%A8%E3%83%AA4%3A%20%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E9%96%A2%E6%95%B0%20(%E3%83%A9%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0)%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo%2C%20orders)%3A%0A%20%20%20%20query4%20%3D%20mo.sql(%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20SELECT%0A%20%20%20%20%20%20%20%20order_id%2C%0A%20%20%20%20%20%20%20%20category%2C%0A%20%20%20%20%20%20%20%20amount%2C%0A%20%20%20%20%20%20%20%20RANK()%20OVER%20(PARTITION%20BY%20category%20ORDER%20BY%20amount%20DESC)%20AS%20rank_in_category%2C%0A%20%20%20%20%20%20%20%20AVG(amount)%20OVER%20(PARTITION%20BY%20category)%20AS%20category_avg%0A%20%20%20%20FROM%20orders%0A%20%20%20%20ORDER%20BY%20category%2C%20rank_in_category%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E8%A3%9C%E8%B6%B3%0A%0A%20%20%20%20-%20%60mo.sql()%60%20%E3%81%AE%E8%BF%94%E3%82%8A%E5%80%A4%E3%81%AF%20pandas%20DataFrame%20%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%20Python%20%E3%82%B3%E3%83%BC%E3%83%89%E3%81%A7%E5%86%8D%E5%88%A9%E7%94%A8%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20-%20%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E6%8E%A5%E7%B6%9A(PostgreSQL%E7%AD%89)%E3%82%92%E4%BD%BF%E3%81%86%E5%A0%B4%E5%90%88%E3%81%AF%20%60mo.sql(%22...%22%2C%20engine%3Dconn)%60%20%E3%81%A7%E6%B8%A1%E3%81%9B%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
21e312c7f9a112e5f620897887527568