본문으로 건너뛰기

리퀘오 / 스킬 / 개발

실행해 보고 고른 SQL

테이블 구조와 질문을 넣으면 시험 데이터에서 실제로 실행해 확인한 조회 SQL 과 실행 결과를 돌려줍니다.

제작 리퀘오 버전 4 사용 1,000회 미만

실행 전에 확인하세요

하는 일
개발 · 테이블 구조와 질문을 넣으면 시험 데이터에서 실제로 실행해 확인한 조회 SQL 과 실행 결과를 돌려줍니다.
넣는 것
필수 테이블 구조, 알고 싶은 것 · 선택 1개 (긴 글 · 선택)
받는 것
SQL, 데이터베이스 종류, 실행해 확인한 SQL(SQLite), 검증 범위, 풀이, 방언 변환(실행 검증 범위 밖), 시험 데이터, 시험 데이터 실행 결과, 시험 데이터에 든 경계 사례, 주의할 점, 인덱스 제안, 후보 처리 내역, 결과 파일 (긴 글 · 목록 · 묶음)
금액
10~60P · 실행 전에 최대 승인액을 확인한 뒤 시작합니다 · 실패·시간 초과·취소는 청구하지 않습니다
처리 한계
입력 최대 100,000자 · 최대 60초 · 보통 2~9초(보장 아님)
파일
파일 첨부 입력은 받지 않습니다. 글은 붙여 넣어 주세요
보관
결과 7일 · 입력 실행이 끝나면 삭제
입력이 가는 곳
리퀘오 내장 처리
제작·버전
리퀘오 · 버전 4 · 2026. 10. 25. 게시
결과물 사용
상업적 이용: 확인 필요 · 재배포: 확인 필요 · 판매자가 확정하지 않은 항목이 있습니다 조건 전체

이 스킬이 하는 일

  1. 넣는 것

    테이블 구조 + 알고 싶은 질문
    지난 30일 동안 결제 완료(status='paid') 주문 금액 합계가 가장 큰 고객 5명의 이름과 합계…
  2. 스킬이 하는 일

    • 질문을 SQL 로 바꿈
    • 시험 데이터로 실제 실행해 결과를 확인
    • 조심할 점과 인덱스를 제안
  3. 받는 것

    검증한 SQL + 실행 결과 표
    SELECT u.name AS name, SUM(o.amount) AS total_amount
    FROM users u
    JOIN orders o ON o.user_id = u.id
    WHERE o.status = 'paid' AND o.ordered_at >= DATE_SUB(CURDATE(), INTER…
    GROUP BY u.id, u.name
    … (2줄 더)

이럴 때 쓰세요

실제 결과물

2026년 10월 22일 실행

이 페이지의 예제 입력을 그대로 실행해 받은 결과입니다. 같은 입력이어도 실행할 때마다 표현은 조금씩 달라질 수 있습니다.

완성된 SQL

SELECT u.name AS name, SUM(o.amount) AS total_amount
FROM users u
JOIN orders o ON o.user_id = u.id
WHERE o.status = 'paid' AND o.ordered_at >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)
GROUP BY u.id, u.name
ORDER BY total_amount DESC, u.name ASC
LIMIT 5

처리 순서

  • users와 orders를 user_id로 조인하여 고객별 주문을 연결합니다.
  • status가 'paid'이고 ordered_at이 최근 30일 이내인 주문만 필터링합니다.
  • 고객별로 amount를 합산하고 합계 내림차순, 이름 오름차순으로 정렬합니다.
  • 상위 5명만 LIMIT으로 반환합니다.

시험 데이터로 실행한 결과

nametotal_amount
오세훈1050000
김민수800000
정도윤800000
이서연700000
최유진650000
결과 더 보기 조심할 점 · 인덱스 제안

조심할 점

  • ordered_at이 DATETIME 텍스트이므로 date('now','-30 days')와의 문자열 비교 범위가 경계 시각을 포함하는지 확인해야 합니다.
  • SQLite 의 'now' 는 UTC 기준이고 MySQL 의 현재 날짜·시각은 세션 시간대 기준입니다.
  • 후보 SQL 사이에 결과가 2가지로 갈렸습니다. 질문 뜻에 가장 맞는 결과를 골랐으니 아래 실행 결과가 기대와 같은지 확인하세요.

인덱스 제안

CREATE INDEX idx_orders_status_ordered_at_user_id ON orders (status, ordered_at, user_id);
결과 JSON 원본 보기 API·MCP 가 돌려주는 모양 그대로
{
  "sql": "SELECT u.name AS name, SUM(o.amount) AS total_amount FROM users u JOIN orders o ON o.user_id = u.id WHERE o.status = 'paid' AND o.ordered_at >= DATE_SUB(CURDATE(), INTERVAL 30 DAY) GROUP BY u.id, u.name ORDER BY total_amount DESC, u.name ASC LIMIT 5",
  "dialect": "mysql",
  "verified_sql": "SELECT u.name AS name, SUM(o.amount) AS total_amount FROM users u JOIN orders o ON o.user_id = u.id WHERE o.status = 'paid' AND o.ordered_at >= date('now', '-30 days') GROUP BY u.id, u.name ORDER BY total_amount DESC, u.name ASC LIMIT 5",
  "verified_scope": "SQLite 문법으로 시험 데이터에서 실행해 확인한 뒤 MySQL 8 문법으로 바꿨습니다. 바꾼 1곳(dialect_changes)은 실행 검증 범위 밖입니다.",
  "steps": [
    "users와 orders를 user_id로 조인하여 고객별 주문을 연결합니다.",
    "status가 'paid'이고 ordered_at이 최근 30일 이내인 주문만 필터링합니다.",
    "고객별로 amount를 합산하고 합계 내림차순, 이름 오름차순으로 정렬합니다.",
    "상위 5명만 LIMIT으로 반환합니다."
  ],
  "dialect_changes": [
    {
      "from": "date('now', '-30 days')",
      "to": "DATE_SUB(CURDATE(), INTERVAL 30 DAY)",
      "note": ""
    }
  ],
  "test_data": [
    {
      "table": "users",
      "columns": [
        "id",
        "name",
        "email",
        "grade",
        "created_at"
      ],
      "types": [
        "INTEGER",
        "TEXT",
        "TEXT",
        "TEXT",
        "TEXT"
      ],
      "row_count": 7,
      "markdown": "| id | name | email | grade | created_at |\n| --- | --- | --- | --- | --- |\n| 1 | 김민수 | minsu@example.com | VIP | 2025-01-10 09:00:00 |\n| 2 | 이서연 | seoyeon@example.com | GOLD | 2025-03-15 12:30:00 |\n| 3 | 박지훈 | NULL | SILVER | 2025-06-01 08:15:00 |\n| 4 | 최유진 | yujin@example.com | GOLD | 2025-08-20 18:45:00 |\n| 5 | 정도윤 | doyun@example.com | VIP | 2025-11-05 10:10:00 |\n| 6 | 한지민 | NULL | SILVER | 2026-02-14 14:00:00 |\n| 7 | 오세훈 | sehun@example.com | GOLD | 2026-09-01 09:30:00 |",
      "rows_json": "[[1,\"김민수\",\"minsu@example.com\",\"VIP\",\"2025-01-10 09:00:00\"],[2,\"이서연\",\"seoyeon@example.com\",\"GOLD\",\"2025-03-15 12:30:00\"],[3,\"박지훈\",null,\"SILVER\",\"2025-06-01 08:15:00\"],[4,\"최유진\",\"yujin@example.com\",\"GOLD\",\"2025-08-20 18:45:00\"],[5,\"정도윤\",\"doyun@example.com\",\"VIP\",\"2025-11-05 10:10:00\"],[6,\"한지민\",null,\"SILVER\",\"2026-02-14 14:00:00\"],[7,\"오세훈\",\"sehun@example.com\",\"GOLD\",\"2026-09-01 09:30:00\"]]"
    },
    {
      "table": "orders",
      "columns": [
        "id",
        "user_id",
        "amount",
        "status",
        "ordered_at"
      ],
      "types": [
        "INTEGER",
        "INTEGER",
        "REAL",
        "TEXT",
        "TEXT"
      ],
      "row_count": 12,
      "markdown": "| id | user_id | amount | status | ordered_at |\n| --- | --- | --- | --- | --- |\n| 1001 | 1 | 500000 | paid | 2026-09-22 10:00:00 |\n| 1002 | 1 | 300000 | paid | 2026-10-01 11:00:00 |\n| 1003 | 2 | 700000 | paid | 2026-09-23 09:00:00 |\n| 1004 | 2 | 200000 | cancelled | 2026-10-05 13:00:00 |\n| 1005 | 3 | 450000 | paid | 2026-10-10 15:20:00 |\n| 1006 | 4 | 650000 | paid | 2026-09-24 08:00:00 |\n| 1007 | 4 | 100000 | refunded | 2026-10-12 17:00:00 |\n| 1008 | 5 | 800000 | paid | 2026-10-15 19:30:00 |\n| 1009 | 6 | 400000 | paid | 2026-09-21 23:59:59 |\n| 1010 | 7 | 900000 | paid | 2026-09-22 00:00:00 |\n| 1011 | 7 | 150000 | paid | 2026-10-22 12:00:00 |\n| 1012 | 3 | 250000 | paid | 2026-09-20 10:00:00 |",
      "rows_json": "[[1001,1,500000,\"paid\",\"2026-09-22 10:00:00\"],[1002,1,300000,\"paid\",\"2026-10-01 11:00:00\"],[1003,2,700000,\"paid\",\"2026-09-23 09:00:00\"],[1004,2,200000,\"cancelled\",\"2026-10-05 13:00:00\"],[1005,3,450000,\"paid\",\"2026-10-10 15:20:00\"],[1006,4,650000,\"paid\",\"2026-09-24 08:00:00\"],[1007,4,100000,\"refunded\",\"2026-10-12 17:00:00\"],[1008,5,800000,\"paid\",\"2026-10-15 19:30:00\"],[1009,6,400000,\"paid\",\"2026-09-21 23:59:59\"],[1010,7,900000,\"paid\",\"2026-09-22 00:00:00\"],[1011,7,150000,\"paid\",\"2026-10-22 12:00:00\"],[1012,3,250000,\"paid\",\"2026-09-20 10:00:00\"]]"
    }
  ],
  "result_table": {
    "columns": [
      "name",
      "total_amount"
    ],
    "row_count": 5,
    "markdown": "| name | total_amount |\n| --- | --- |\n| 오세훈 | 1050000 |\n| 김민수 | 800000 |\n| 정도윤 | 800000 |\n| 이서연 | 700000 |\n| 최유진 | 650000 |",
    "rows_json": "[[\"오세훈\",1050000],[\"김민수\",800000],[\"정도윤\",800000],[\"이서연\",700000],[\"최유진\",650000]]",
    "truncated": false
  },
  "edge_coverage": {
    "nulls": true,
    "duplicates": true,
    "empty_groups": false,
    "notes": [
      "NULL 이 든 열: users.email 2행",
      "같은 값이 겹치는 열: users.grade, orders.status"
    ]
  },
  "cautions": [
    "ordered_at이 DATETIME 텍스트이므로 date('now','-30 days')와의 문자열 비교 범위가 경계 시각을 포함하는지 확인해야 합니다.",
    "SQLite 의 'now' 는 UTC 기준이고 MySQL 의 현재 날짜·시각은 세션 시간대 기준입니다.",
    "후보 SQL 사이에 결과가 2가지로 갈렸습니다. 질문 뜻에 가장 맞는 결과를 골랐으니 아래 실행 결과가 기대와 같은지 확인하세요."
  ],
  "index_suggestions": [
    {
      "table": "orders",
      "columns": [
        "status",
        "ordered_at",
        "user_id"
      ],
      "statement": "CREATE INDEX idx_orders_status_ordered_at_user_id ON orders (status, ordered_at, user_id);"
    }
  ],
  "candidates": {
    "generated": 4,
    "executed_ok": 4,
    "rejected": 0,
    "distinct_results": 2,
    "agreeing": 3
  }
}

실행하기

10~60P/ 실행
  1. 입력 넣기직접 쓰거나 아래 예제로 채우기
  2. 예상 금액 확인최대 승인액을 보고 실행
  3. 실행보통 2~9초 안에 끝남
  4. 결과 받기정상 결과일 때만 차감

예제 입력 1개

  1. 테이블 구조
    CREATE TABLE `users` (
      `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
      `name` VARCHAR(50) NOT NULL COMMENT '이름',
      `email` VARCHAR(120) DEFAULT NULL,
      `grade` VARCHAR(10) NOT NULL DEFAULT 'basic',
      `created_at` DATETIME NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `uk_email` (`email`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    
    CREATE TABLE `orders` (
      `id` BIGINT NOT NULL AUTO_INCREMENT,
      `user_id` INT UNSIGNED NOT NULL,
      `amount` DECIMAL(12,0) NOT NULL,
      `status` VARCHAR(20) NOT NULL COMMENT 'paid, cancelled, refunded',
      `ordered_at` DATETIME NOT NULL,
      PRIMARY KEY (`id`),
      KEY `idx_user` (`user_id`),
      CONSTRAINT `fk_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
    ) ENGINE=InnoDB;
    알고 싶은 것
    지난 30일 동안 결제 완료(status='paid') 주문 금액 합계가 가장 큰 고객 5명의 이름과 합계를 보여 줘. 취소·환불 주문은 빼고, 합계가 큰 순서로.
    데이터베이스 종류
    mysql
    JSON 보기

    입력

    {
      "schema": "CREATE TABLE `users` (\n  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,\n  `name` VARCHAR(50) NOT NULL COMMENT '이름',\n  `email` VARCHAR(120) DEFAULT NULL,\n  `grade` VARCHAR(10) NOT NULL DEFAULT 'basic',\n  `created_at` DATETIME NOT NULL,\n  PRIMARY KEY (`id`),\n  UNIQUE KEY `uk_email` (`email`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;\n\nCREATE TABLE `orders` (\n  `id` BIGINT NOT NULL AUTO_INCREMENT,\n  `user_id` INT UNSIGNED NOT NULL,\n  `amount` DECIMAL(12,0) NOT NULL,\n  `status` VARCHAR(20) NOT NULL COMMENT 'paid, cancelled, refunded',\n  `ordered_at` DATETIME NOT NULL,\n  PRIMARY KEY (`id`),\n  KEY `idx_user` (`user_id`),\n  CONSTRAINT `fk_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)\n) ENGINE=InnoDB;",
      "question": "지난 30일 동안 결제 완료(status='paid') 주문 금액 합계가 가장 큰 고객 5명의 이름과 합계를 보여 줘. 취소·환불 주문은 빼고, 합계가 큰 순서로.",
      "dialect": "mysql"
    }
예상 금액
10~60P
최대 승인액
실행 전에 확인
실행 상태
시작 전
비용 상태
예약 전
다음 행동
로그인한 뒤 실행할 수 있습니다.

실행 전에 확인: 상업적 이용: 확인 필요 · 재배포: 확인 필요 · 확인 필요 항목 있음. 결과 화면에서 이 조건이 담긴 명세를 받을 수 있습니다.

예상 시간
2~9초
처리 단계
글 생성
처리 횟수
보통 5회 · 최대 6회
  • 결과가 정상적으로 나왔을 때만 차감됩니다.
  • 실패·시간초과·취소는 차감되지 않습니다.
  • 기본 처리비 + 응답 사용량과 저장 단가로 계산한 도구 사용료. 최대액을 예약하고 차액을 반환합니다. 사용량 미확인·실패 시 청구하지 않습니다.
요금 계산 방식 자세히
  • 금액 = 기본요금(판매자 금액·기본 수수료) + 실제 AI 사용료
  • AI 사용료는 모델별 단가와 실제 사용량으로 계산하며, AI 사용료에 수수료를 다시 붙이지 않습니다.
  • 2026년 11월 6일부터 시간대별 요금이 있는 모델도 시간대와 관계없이 같은 단가를 적용합니다.
  • 출고 전 평가 사례의 실측 범위; 입력 크기에 따라 달라지며 보장 시간 아님
  • TTS에 연결한 정규화의 취소·환불은 TTS 정산 규칙을 적용합니다.

이 Skill 의 결과는 생성형 AI 가 만듭니다.

자세한 설명

CREATE TABLE 문이나 간단한 테이블 설명과 한국어 질문을 넣으면, SQL 후보를 여러 개 만들고 NULL·중복·빈 그룹이 든 시험 데이터를 만든 뒤 격리된 메모리 데이터베이스에서 모두 실행해 봅니다. 문법 오류나 없는 열을 쓴 후보는 버리고, 결과가 갈리면 질문 뜻에 맞는 결과를 고릅니다. SQL, 풀이, 시험 데이터와 실행 결과 표, 주의할 점, 인덱스 제안을 함께 받으며 MySQL·PostgreSQL 용 문법 변환 부분은 따로 표시합니다. 조회(SELECT)만 만듭니다.

검증 결과: 8개 사례 평균 89.6/100점, 일반 모델 1회 텍스트 응답 48.6점. 실측 2~5초, 외부 AI 보통 5회. 동일 도구 조건의 실험이 아닌 납품 결과 비교이며, 반복 개선에 사용한 사례의 결과로 일반적인 성능을 보장하지 않습니다.

입력과 결과 형식

넣는 값 입력

  • 테이블 구조필수schema

    글 · 최대 20,000자

    CREATE TABLE 문을 그대로 붙여 넣거나 orders(id, user_id, amount, created_at) 처럼 적습니다.

  • 알고 싶은 것필수question

    글 · 최대 600자

    예: 지난 30일 동안 주문 금액 합계가 큰 고객 5명

  • 데이터베이스 종류dialect

    글 (mysql · postgresql · sqlite)

입력은 글자 수 합계 100,000자까지, 처리 시간은 최대 60초입니다.

받는 값 결과

  • SQLsql

    글

  • 데이터베이스 종류dialect

    글

  • 실행해 확인한 SQL(SQLite)verified_sql

    글

  • 검증 범위verified_scope

    글

  • 풀이steps

    글 목록

  • 방언 변환(실행 검증 범위 밖)dialect_changes

    목록 (SQLite · 변환 · 참고)

  • 시험 데이터test_data

    목록 (테이블 · 열 · 열 형식(SQLite) · 행 수 · 표 · 행(JSON))

  • 시험 데이터 실행 결과result_table

    묶음

  • 시험 데이터에 든 경계 사례edge_coverage

    묶음

  • 주의할 점cautions

    글 목록

  • 인덱스 제안index_suggestions

    목록 (테이블 · 열 · 문장)

  • 후보 처리 내역candidates

    묶음

  • 결과 파일artifacts

    목록 (파일 ID · 파일 이름 · 설명 · 파일 형식 · 파일 주소 · 파일 해시 · 크기(바이트) · 너비 · 높이 · 길이(초)) · 최대 20개

API·MCP 로 쓰기

  1. API 키 준비인증키와 포인트는 다른 리퀘오 API 와 같습니다
  2. REST 또는 MCP 로 요청아래 예시를 복사해 입력만 바꾸기
  3. 결과 받기화면 실행과 같은 금액·정산 규칙

REST

curl -X POST https://reqeo.com/rest/skills/sk_3cf71aacb7d664b9/runs \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Idempotency-Key: my-request-001" \
  -H "Content-Type: application/json" \
  -d '{"input":{"schema":"CREATE TABLE `users` (\n  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,\n  `name` VARCHAR(50) NOT NULL COMMENT '\''이름'\'',\n  `email` VARCHAR(120) DEFAULT NULL,\n  `grade` VARCHAR(10) NOT NULL DEFAULT '\''basic'\'',\n  `created_at` DATETIME NOT NULL,\n  PRIMARY KEY (`id`),\n  UNIQUE KEY `uk_email` (`email`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;\n\nCREATE TABLE `orders` (\n  `id` BIGINT NOT NULL AUTO_INCREMENT,\n  `user_id` INT UNSIGNED NOT NULL,\n  `amount` DECIMAL(12,0) NOT NULL,\n  `status` VARCHAR(20) NOT NULL COMMENT '\''paid, cancelled, refunded'\'',\n  `ordered_at` DATETIME NOT NULL,\n  PRIMARY KEY (`id`),\n  KEY `idx_user` (`user_id`),\n  CONSTRAINT `fk_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)\n) ENGINE=InnoDB;","question":"지난 30일 동안 결제 완료(status='\''paid'\'') 주문 금액 합계가 가장 큰 고객 5명의 이름과 합계를 보여 줘. 취소·환불 주문은 빼고, 합계가 큰 순서로.","dialect":"mysql"}}'

Idempotency-Key 는 요청마다 새로 정하는 값입니다. 같은 값으로 다시 보내면 한 번만 실행되고 같은 결과를 돌려받습니다.

MCP

엔드포인트  https://reqeo.com/mcp/skills
도구        run_skill
skill_id    sk_3cf71aacb7d664b9

자세한 요청·응답 형식은 개발가이드에 있습니다.

리뷰 0개

로그인하고 이 스킬을 실행하면 리뷰를 남길 수 있습니다. 로그인

아직 리뷰가 없습니다. 실행해 본 뒤 첫 리뷰를 남겨 주세요.

질문·토론

실행 전 궁금한 점이나 사용 경험을 나눠 주세요. 별점 평가는 위의 리뷰에 남깁니다. 판매자가 쓴 글에는 '판매자' 표시가 붙고, 이름은 첫 글자만 보입니다.

로그인하면 질문을 남기거나 답글을 달 수 있습니다.

댓글을 불러오는 중입니다…

결과물 사용 조건 버전 4

결과물 형식
상품 설명의 결과 형식
상업적 이용
확인 필요 (판매자 확인 전)
출처 표시
확인 필요 (판매자 확인 전)
재배포
확인 필요 (판매자 확인 전)
포함된 제3자 자산(폰트·이미지·음원 등)의 조건
등록된 조건 없음
고객 입력에 필요한 권리
등록된 조건 없음
그 밖의 조건
등록된 조건 없음

판매자가 이 버전에 등록한 조건입니다. 버전이 승인된 뒤에는 바뀌지 않으며, 실행 결과의 명세에 그때 조건이 함께 담깁니다. 리퀘오가 결과물의 권리를 보증하는 것은 아닙니다. 자세한 기준은 이용약관을 확인해 주세요.