Tested prompt · SQL
Every customer, even those without orders: every AI model's reply, tested
We sent this hard SQL prompt to all 16 models in llmwise, the same way the app sends a message, and checked every reply the same way. Here's each one as it came, with whether it passed, what it cost and how long it took.
Based on 16 of our test runs on , through OpenRouter with the app's own prompt and settings. Updated .
Short answer
All 16 models passed this SQL prompt's check (query result). The cheapest reply that passed was GPT-6 Luna's, at $0.000098; the fastest, GLM 5.3's in 1.0 s. The dearest reply, Claude Fable 5.1's, cost 202 times as much ($0.0199).
The prompt, as sent, and its check
Checked by query result, the same way for every model.
Every customer, even those without orders (hard)
[5 lines every SQL prompt of ours shares, word for word: the whole prompt, on the methods page] For every customer, show their name, the date of their first order that wasn't cancelled, and how many orders that weren't cancelled they have. Include customers who have no such orders, with NULL for the date and 0 for the count. Sort by name. Write one SQLite query and reply with it in a ```sql code block.
The query must return the same rows as this one, on the fixture database below, in the same order:
SELECT c.name, MIN(o.ordered_on) AS first_order, COUNT(o.id) AS orders FROM customers c LEFT JOIN orders o ON o.customer_id = c.id AND o.status <> 'cancelled' GROUP BY c.id, c.name ORDER BY c.name
Exactly what this prompt's replies are checked against, with every other prompt of our test runs.
Every model's result
All 16 models on this prompt, in catalog order.
| Model | Result | Cost | Time | Reply |
|---|---|---|---|---|
| Claude Fable 5.1Anthropic | Passed: Returned the right 8 rows. | $0.0199 | 5.2 s | 185 tokens |
| Claude Opus 5.5Anthropic | Passed: Returned the right 8 rows. | $0.0094 | 5.0 s | 201 tokens |
| Claude Sonnet 5.5Anthropic | Passed: Returned the right 8 rows. | $0.0043 | 2.3 s | 213 tokens |
| Claude Sonnet 5Anthropic | Passed: Returned the right 8 rows. | $0.0030 | 2.2 s | 129 tokens |
| Claude Haiku 4.5Anthropic | Passed: Returned the right 8 rows. | $0.0010 | 2.1 s | 90 tokens |
| GPT-6 AstraOpenAI | Passed: Returned the right 8 rows. | $0.0091 | 2.9 s | 77 tokens |
| GPT-6 SolOpenAI | Passed: Returned the right 8 rows. | $0.0018 | 1.4 s | 80 tokens |
| GPT-6 LunaOpenAI | Passed: Returned the right 8 rows. | $0.000098 | 2.4 s | 92 tokens |
| Gemini 3.1 Pro (preview)Google | Passed: Returned the right 8 rows. | $0.0089 | 7.9 s | 87 tokens |
| Gemini 3.8 FlashGoogle | Passed: Returned the right 8 rows. | $0.00078 | 3.7 s | 96 tokens |
| DeepSeek V4.1 FlashDeepSeek | Passed: Returned the right 8 rows. | $0.00022 | 1.7 s | 113 tokens |
| DeepSeek V4 ProDeepSeek | Passed: Returned the right 8 rows. | $0.0028 | 4.5 s | 78 tokens |
| Grok 4.7xAI | Passed: Returned the right 8 rows. | $0.0037 | 5.3 s | 74 tokens |
| Kimi K3Moonshot | Passed: Returned the right 8 rows. | $0.0031 | 2.5 s | 96 tokens |
| GLM 5.3Z.ai | Passed: Returned the right 8 rows. | $0.00072 | 1.0 s | 67 tokens |
| GLM 5.3 FlashZ.ai | Passed: Returned the right 8 rows. | $0.00012 | 1.0 s | 70 tokens |
Cost: what OpenRouter charged us for the reply. Time: from sending to the whole reply. Reply: its length in tokens, thinking not counted. In llmwise you pay per message, not per token: each of these replies counted as one message on Pro.
Every reply
Every reply passed: here they are from the cheapest up.
GPT-6 Luna
Passed: Returned the right 8 rows.
```sql SELECT c.name, MIN(CASE WHEN o.status <> 'cancelled' THEN o.ordered_on END) AS first_order_date, COUNT(CASE WHEN o.status <> 'cancelled' THEN o.id END) AS order_count FROM customers AS c LEFT JOIN orders AS o ON o.customer_id = c.id GROUP BY c.id, c.name ORDER BY c.name; ```
522 tokens in, 92 out · 2.4 s · $0.0001 · 1 message on Pro · answered by openai/gpt-6-luna via OpenAI ·
GLM 5.3 Flash
Passed: Returned the right 8 rows.
```sql SELECT c.name, MIN(o.ordered_on) AS first_order_date, COUNT(o.id) AS order_count FROM customers c LEFT JOIN orders o ON o.customer_id = c.id AND o.status != 'cancelled' GROUP BY c.id, c.name ORDER BY c.name; ```
539 tokens in, 70 out · 1.0 s · $0.0001 · 1 message on Pro · answered by z-ai/glm-5.3-flash via Together ·
DeepSeek V4.1 Flash
Passed: Returned the right 8 rows.
```sql SELECT c.name, MIN(o.ordered_on) AS first_order_date, COUNT(o.id) AS order_count FROM customers c LEFT JOIN orders o ON o.customer_id = c.id AND o.status <> 'cancelled' GROUP BY c.id, c.name ORDER BY c.name; ``` The `status <> 'cancelled'` condition lives in the `ON` clause (not `WHERE`) so customers with no qualifying orders are kept, yielding `NULL` and `0`.
565 tokens in, 168 out (55 of them reasoning) · 1.7 s · $0.0002 · 1 message on Pro · answered by deepseek/deepseek-v4.1-flash via Novita ·
GLM 5.3
Passed: Returned the right 8 rows.
```sql SELECT c.name, MIN(o.ordered_on) AS first_order_date, COUNT(o.id) AS order_count FROM customers c LEFT JOIN orders o ON o.customer_id = c.id AND o.status != 'cancelled' GROUP BY c.id, c.name ORDER BY c.name; ```562 tokens in, 68 out (1 of them reasoning) · 1.0 s · $0.0007 · 1 message on Pro · answered by z-ai/glm-5.3 via Wafer ·
Gemini 3.8 Flash
Passed: Returned the right 8 rows.
```sql SELECT c.name, MIN(o.ordered_on) AS first_order_date, COUNT(o.id) AS non_cancelled_orders_count FROM customers c LEFT JOIN orders o ON c.id = o.customer_id AND o.status != 'cancelled' GROUP BY c.id, c.name ORDER BY c.name; ```566 tokens in, 96 out · 3.7 s · $0.0008 · 1 message on Pro · answered by google/gemini-3.8-flash via Google ·
Claude Haiku 4.5
Passed: Returned the right 8 rows.
```sql SELECT c.name, MIN(o.ordered_on) AS first_order_date, COUNT(o.id) AS order_count FROM customers c LEFT JOIN orders o ON c.id = o.customer_id AND o.status != 'cancelled' GROUP BY c.id, c.name ORDER BY c.name; ```
569 tokens in, 90 out · 2.1 s · $0.0010 · 1 message on Pro · answered by anthropic/claude-haiku-4.5 via Amazon Bedrock ·
GPT-6 Sol
Passed: Returned the right 8 rows.
```sql SELECT c.name, MIN(o.ordered_on) AS first_order_date, COUNT(o.id) AS non_cancelled_order_count FROM customers AS c LEFT JOIN orders AS o ON o.customer_id = c.id AND o.status <> 'cancelled' GROUP BY c.id, c.name ORDER BY c.name; ```522 tokens in, 80 out · 1.4 s · $0.0018 · 1 message on Pro · answered by openai/gpt-6-sol via OpenAI ·
DeepSeek V4 Pro
Passed: Returned the right 8 rows.
```sql SELECT c.name, MIN(o.ordered_on) AS first_order_date, COUNT(o.id) AS non_cancelled_orders FROM customers c LEFT JOIN orders o ON o.customer_id = c.id AND o.status <> 'cancelled' GROUP BY c.id, c.name ORDER BY c.name; ```537 tokens in, 385 out (307 of them reasoning) · 4.5 s · $0.0028 · 1 message on Pro · answered by deepseek/deepseek-v4-pro-0813 via Venice ·
Claude Sonnet 5
Passed: Returned the right 8 rows.
```sql SELECT c.name, MIN(o.ordered_on) AS first_order_date, COUNT(o.id) AS order_count FROM customers c LEFT JOIN orders o ON o.customer_id = c.id AND o.status != 'cancelled' GROUP BY c.id, c.name ORDER BY c.name; ```859 tokens in, 129 out · 2.2 s · $0.0030 · 1 message on Pro · answered by anthropic/claude-sonnet-5 via Claude Platform on AWS ·
Kimi K3
Passed: Returned the right 8 rows.
```sql SELECT c.name, MIN(CASE WHEN o.status != 'cancelled' THEN o.ordered_on END) AS first_order_date, COUNT(CASE WHEN o.status != 'cancelled' THEN o.id END) AS order_count FROM customers c LEFT JOIN orders o ON o.customer_id = c.id GROUP BY c.id, c.name ORDER BY c.name; ```609 tokens in, 102 out (6 of them reasoning) · 2.5 s · $0.0031 · 1 message on Pro · answered by moonshotai/kimi-k3 via Together ·
Grok 4.7
Passed: Returned the right 8 rows.
```sql SELECT c.name, MIN(o.ordered_on) AS first_order_date, COUNT(o.id) AS order_count FROM customers c LEFT JOIN orders o ON o.customer_id = c.id AND o.status != 'cancelled' GROUP BY c.id ORDER BY c.name; ```
1,768 tokens in, 472 out (398 of them reasoning) · 5.3 s · $0.0037 · 1 message on Pro · answered by x-ai/grok-4.7 via xAI ·
Claude Sonnet 5.5
Passed: Returned the right 8 rows.
```sql SELECT c.name, MIN(o.ordered_on) AS first_order_date, COUNT(o.id) AS order_count FROM customers c LEFT JOIN orders o ON o.customer_id = c.id AND o.status <> 'cancelled' GROUP BY c.id, c.name ORDER BY c.name; ``` The status filter is in the `ON` clause so customers with no qualifying orders are kept, giving NULL for the date and 0 for the count. This assumes cancelled orders have the status `'cancelled'`, so adjust the string if your data uses different casing or wording.863 tokens in, 213 out · 2.3 s · $0.0043 · 1 message on Pro · answered by anthropic/claude-sonnet-5.5 via Anthropic ·
Gemini 3.1 Pro
Passed: Returned the right 8 rows.
```sql SELECT c.name, MIN(o.ordered_on) AS first_order_date, COUNT(o.id) AS order_count FROM customers c LEFT JOIN orders o ON c.id = o.customer_id AND o.status != 'cancelled' GROUP BY c.id ORDER BY c.name; ```566 tokens in, 645 out (558 of them reasoning) · 7.9 s · $0.0089 · 1 message on Pro · answered by google/gemini-3.1-pro-preview via Google ·
GPT-6 Astra
Passed: Returned the right 8 rows.
```sql SELECT c.name, MIN(o.ordered_on) AS first_order_date, COUNT(o.id) AS order_count FROM customers AS c LEFT JOIN orders AS o ON o.customer_id = c.id AND o.status <> 'cancelled' GROUP BY c.id, c.name ORDER BY c.name; ```522 tokens in, 77 out · 2.9 s · $0.0091 · 1 message on Pro · answered by openai/gpt-6-astra via OpenAI ·
Claude Opus 5.5
Passed: Returned the right 8 rows.
```sql SELECT c.name, MIN(o.ordered_on) AS first_order_date, COUNT(o.id) AS order_count FROM customers AS c LEFT JOIN orders AS o ON o.customer_id = c.id AND o.status <> 'cancelled' GROUP BY c.id, c.name ORDER BY c.name; ``` This assumes cancelled orders have the status `'cancelled'` and that `ordered_on` is stored in ISO format (YYYY-MM-DD), so the earliest date is also the smallest text value.861 tokens in, 260 out (59 of them reasoning) · 5.0 s · $0.0094 · 1 message on Pro · answered by anthropic/claude-opus-5.5 via Claude Platform on AWS ·
Claude Fable 5.1
Passed: Returned the right 8 rows.
```sql SELECT c.name, MIN(o.ordered_on) AS first_order_date, COUNT(o.id) AS order_count FROM customers c LEFT JOIN orders o ON o.customer_id = c.id AND o.status <> 'cancelled' GROUP BY c.id, c.name ORDER BY c.name; ``` The status filter is in the `ON` clause (not `WHERE`) so customers with only cancelled orders or no orders are still kept, yielding `NULL` and `0`.861 tokens in, 185 out · 5.2 s · $0.0199 · 1 message on Pro · answered by anthropic/claude-fable-5.1 via Anthropic ·
More SQL prompts
The other SQL prompts, each with every model's reply, and the results across all five.
Questions
Which AI does best on “Every customer, even those without orders”?
All 16 models passed this SQL prompt's check (query result). The cheapest reply that passed was GPT-6 Luna's, at $0.000098; the fastest, GLM 5.3's in 1.0 s. The dearest reply, Claude Fable 5.1's, cost 202 times as much ($0.0199).
What does a reply to “Every customer, even those without orders” cost?
Through the models' APIs, what OpenRouter charged us ran from $0.000098 (GPT-6 Luna) to $0.0199 (Claude Fable 5.1) for this prompt. In llmwise you don't pay by the token: a reply like these counts as one message on Pro, whichever model answers.
Claude, GPT, Gemini, DeepSeek, Grok, Kimi, and GLM, in one chat.
See what a message costs before you send it. Free is 5 messages to try; sign in with an email link, no password or card.