sql-query-helper
npx skills add https://github.com/ntaksh42/agents --skill sql-query-helper
Agent 安装分布
Skill 文档
SQL Query Helper Skill
SQLã¯ã¨ãªãçæã»æé©åã»èª¬æããã¹ãã«ã§ãã
æ¦è¦
èªç¶è¨èªããSQL ã¯ã¨ãªãçæããæ¢åã¯ã¨ãªãæé©åãã¾ãã
ä¸»ãªæ©è½
- ã¯ã¨ãªçæ: è¦ä»¶ããSQL ãèªåçæ
- ã¯ã¨ãªæé©å: ã¤ã³ããã¯ã¹æ´»ç¨ãN+1è§£æ¶
- ã¯ã¨ãªèª¬æ: è¤éãªã¯ã¨ãªã人éãèªããå½¢ã§èª¬æ
- ããã©ã¼ãã³ã¹åæ: EXPLAIN ãã©ã³ã®è§£é
- ãã¤ã°ã¬ã¼ã·ã§ã³: DDLæã®çæ
- ãã¼ã¿ãã¼ã¹å¯¾å¿: PostgreSQLãMySQLãSQLiteãSQL Server
ä½¿ç¨æ¹æ³
以ä¸ã®è¦ä»¶ã§SQLã¯ã¨ãªãçæï¼
ãã¼ãã«: users, orders
æ¡ä»¶: 2024å¹´ã«3å以䏿³¨æããã¦ã¼ã¶ã¼ã®ãªã¹ã
ã½ã¼ã: 注æåæ°ã®éé
çæä¾
åºæ¬çãªSELECT
è¦ä»¶: ã¢ã¯ãã£ãã¦ã¼ã¶ã¼ã®ã¡ã¼ã«ã¢ãã¬ã¹ä¸è¦§
çæã¯ã¨ãª:
SELECT email
FROM users
WHERE active = true
ORDER BY email;
JOIN ã¯ã¨ãª
è¦ä»¶: ã¦ã¼ã¶ã¼ã¨ãã®æ³¨æã®ä¸è¦§ï¼æ³¨æããªãã¦ã¼ã¶ã¼ãå«ãï¼
çæã¯ã¨ãª:
SELECT
u.id,
u.name,
u.email,
o.id AS order_id,
o.total,
o.created_at AS order_date
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
ORDER BY u.id, o.created_at DESC;
éè¨ã¯ã¨ãª
è¦ä»¶: ã¦ã¼ã¶ã¼æ¯ã®ç·è³¼å ¥éé¡ï¼è³¼å ¥ãã ã®ã¿ï¼
çæã¯ã¨ãª:
SELECT
u.id,
u.name,
COUNT(o.id) AS order_count,
SUM(o.total) AS total_spent,
AVG(o.total) AS avg_order_value
FROM users u
INNER JOIN orders o ON u.id = o.user_id
GROUP BY u.id, u.name
HAVING COUNT(o.id) > 0
ORDER BY total_spent DESC;
ãµãã¯ã¨ãª
è¦ä»¶: å¹³å以ä¸ã®æ³¨æéé¡ã®ã¦ã¼ã¶ã¼
çæã¯ã¨ãª:
SELECT
u.name,
o.total
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE o.total > (
SELECT AVG(total)
FROM orders
)
ORDER BY o.total DESC;
ã¯ã¨ãªæé©å
N+1 åé¡ã®è§£æ±º
éå¹çï¼N+1ï¼:
-- 1. ãã¹ã¦ã®ã¦ã¼ã¶ã¼ãåå¾
SELECT * FROM users;
-- 2. åã¦ã¼ã¶ã¼ã®æ³¨æãåå¥ã«åå¾ï¼Nã¯ã¨ãªï¼
SELECT * FROM orders WHERE user_id = 1;
SELECT * FROM orders WHERE user_id = 2;
-- ... (ã¦ã¼ã¶ã¼æ°ã ãç¹°ãè¿ã)
æé©åï¼1ã¯ã¨ãªï¼:
SELECT
u.*,
o.*
FROM users u
LEFT JOIN orders o ON u.id = o.user_id;
ã¤ã³ããã¯ã¹æ´»ç¨
é ãã¯ã¨ãª:
SELECT * FROM users
WHERE email = 'user@example.com'; -- ã¤ã³ããã¯ã¹ãªã
ã¤ã³ããã¯ã¹è¿½å :
CREATE INDEX idx_users_email ON users(email);
æé©åå¾:
-- åãã¯ã¨ãªã§ãé«éå
SELECT * FROM users
WHERE email = 'user@example.com'; -- ã¤ã³ããã¯ã¹ä½¿ç¨
WHERE vs HAVING
éå¹ç:
SELECT user_id, COUNT(*) as order_count
FROM orders
GROUP BY user_id
HAVING user_id > 100; -- GROUP BYå¾ã«ãã£ã«ã¿
æé©å:
SELECT user_id, COUNT(*) as order_count
FROM orders
WHERE user_id > 100 -- GROUP BYåã«ãã£ã«ã¿
GROUP BY user_id;
EXISTS vs IN
大éãã¼ã¿ã§é ã:
SELECT * FROM users
WHERE id IN (SELECT user_id FROM orders);
æé©å:
SELECT * FROM users u
WHERE EXISTS (
SELECT 1 FROM orders o
WHERE o.user_id = u.id
);
ã¯ã¨ãªèª¬æ
å ¥å:
SELECT u.name, COUNT(o.id) as order_count
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
WHERE u.created_at > '2024-01-01'
GROUP BY u.id, u.name
HAVING COUNT(o.id) > 3
ORDER BY order_count DESC
LIMIT 10;
説æ:
ãã®ã¯ã¨ãªã¯ã**2024年以éã«ç»é²ããã¦ã¼ã¶ã¼ã®ä¸ã§ã4å以䏿³¨æããã¦ã¼ã¶ã¼ã®ããã10**ãåå¾ãã¾ãã
å®è¡é åº:
1. FROM: users ãã¼ãã«ãåºæºã«
2. LEFT JOIN: orders ãã¼ãã«ãçµåï¼æ³¨æããªãã¦ãã¦ã¼ã¶ã¼ã¯å«ã¾ããï¼
3. WHERE: 2024å¹´1æ1æ¥ä»¥éã«ä½æãããã¦ã¼ã¶ã¼ã®ã¿
4. GROUP BY: ã¦ã¼ã¶ã¼ãã¨ã«ã°ã«ã¼ãå
5. HAVING: 注æã4å以ä¸ã®ã°ã«ã¼ãã®ã¿
6. SELECT: ã¦ã¼ã¶ã¼åã¨æ³¨ææ°ã鏿
7. ORDER BY: æ³¨ææ°ã®éé
8. LIMIT: ä¸ä½10ä»¶ã®ã¿
çµæ:
- å: nameï¼ã¦ã¼ã¶ã¼åï¼ãorder_countï¼æ³¨æåæ°ï¼
- è¡æ°: æå¤§10è¡
DDLçæ
è¦ä»¶: ã¦ã¼ã¶ã¼ãã¼ãã«ã®ä½æ
çæDDL:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
name VARCHAR(100) NOT NULL,
password_hash VARCHAR(255) NOT NULL,
active BOOLEAN DEFAULT true,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_users_active ON users(active);
CREATE INDEX idx_users_created_at ON users(created_at);
ãã¼ã¿ãã¼ã¹å¥ã®éã
PostgreSQL
-- RETURNINGå¥
INSERT INTO users (name, email)
VALUES ('John', 'john@example.com')
RETURNING id, created_at;
-- ARRAYå
SELECT ARRAY_AGG(name) FROM users;
MySQL
-- AUTO_INCREMENT
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY
);
-- LIMIT OFFSET
SELECT * FROM users LIMIT 10 OFFSET 20;
SQLite
-- AUTOINCREMENT
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT
);
ãã¼ã¸ã§ã³æ å ±
- ã¹ãã«ãã¼ã¸ã§ã³: 1.0.0
- æçµæ´æ°: 2025-01-22
使ç¨ä¾:
SQLã¯ã¨ãªãçæï¼
- ãã¼ãã«: products, categories
- åå¾: ã«ãã´ãªå¥ã®ååæ°ã¨å¹³åä¾¡æ ¼
- æ¡ä»¶: å¨åº«ããã®ååã®ã¿
- ã½ã¼ã: ååæ°ã®å¤ãé
æé©åãããSQLã¯ã¨ãªãçæããã¾ãï¼