我正在做一個SQL練習,並卡住了。如果我有數據庫架構在電腦商行http://sql-ex.ru/help/select13.php#db_1,問題描述爲:如何在此SQL練習中使用row_number和case語句?
重新編號,從產品表中的唯一雙{製造商,類型},已經責令他們如下:
- 製造商的名稱(製造商)在上升;
- 訂單中的產品類型(類型):PC,筆記本電腦,打印機。
如果製造商生產多種類型的產品,則僅在第一行中推出其名稱;
此製造商的其他行應包含一個空字符串('')。
我的查詢:
select
row_number() over (ORDER BY
maker ASC,
CASE type when 'PC' THEN 1 WHEN 'Laptop' THEN 2 WHEN 'Printer' THEN 3 END
) num,
maker, type
from product
order by maker, CASE type when 'PC' THEN 1 WHEN 'Laptop' THEN 2 WHEN 'Printer' THEN 3 END
我(不正確)答案:
+-----+-------+---------+
| num | maker | type |
+-----+-------+---------+
| 1 | A | PC |
| 10 | C | Laptop |
| 11 | D | Printer |
| 12 | D | Printer |
| 13 | E | PC |
| 14 | E | PC |
| 15 | E | PC |
| 16 | E | Printer |
| 2 | A | PC |
| 3 | A | Laptop |
| 4 | A | Laptop |
| 5 | A | Printer |
| 6 | A | Printer |
| 7 | A | Printer |
| 8 | B | PC |
| 9 | B | Laptop |
+-----+-------+---------+
正確的答案是這樣的:
+-----+-------+---------+
| num | maker | type |
+-----+-------+---------+
| 1 | A | PC |
| 2 | | Laptop |
| 3 | | Printer |
| 4 | B | PC |
| 5 | | Laptop |
| 6 | C | Laptop |
| 7 | D | Printer |
| 8 | E | PC |
| 9 | | Printer |
+-----+-------+---------+
編輯
這是網站所說的在SQL支持方面使用的內容:Now we use Microsoft SQL Server 2012 on the rating stages, and MySQL 5.5.11, PostgreSQL 9.0, and Oracle Database 11g on the learn stage in addition.
。這個問題來自學習階段。
您似乎有比正確的答案更多的行,爲什麼? – Blorgbeard
您標記了'mysql' - 您的意思是'sql server'或其他支持分析函數的數據庫嗎? – sgeddes
謝謝,我刪除了標籤。這就是該網站所說的SQL支持:「現在我們在評級階段使用Microsoft SQL Server 2012,另外在學習階段使用MySQL 5.5.11,PostgreSQL 9.0和Oracle Database 11g。 '。這個問題來自學習階段。 – Nona