सभी चुनौतियाँ
मध्यम 0 हल किए गए 0% स्वीकृति

SQL क्वेरी बिल्डर

कई हिस्सों से, जो किसी भी क्रम में दिए गए हों, एक SQL query बनाएं, जैसे एक builder object step by step settings इकट्ठा करता है.

आप क्या सीखेंगे

  • किसी भी क्रम में हिस्से इकट्ठा करके फिर बनाना
  • छूटे हिस्सों के लिए डिफ़ॉल्ट मान लेना
  • तय फ़ॉर्मेट में नतीजा जोड़ना

समस्या

The builder pattern एक जटिल object को step by step बनाता है और अंत में final result देता है, ताकि callers parts को किसी भी order में set कर सकें.

Each part is a keyword, a space, and its text:

  • select <columns>: comma-separated column names (spaces around commas may vary). Optional; the default is *.
  • from <table>: required.
  • where <condition>, order <columns>, limit <n>: optional.

If a keyword appears more than once, the last one wins. Query को इस fixed order में, single spaces के साथ बनाएं:

SELECT <columns> FROM <table>[ WHERE <condition>][ ORDER BY <columns>][ LIMIT <n>]

In the SELECT list, प्रत्येक column को trim करें और उन्हें , के साथ join करें. All other texts are copied unchanged.

Implement query_builder(parts).

Input

parts: The parts, in any order.

Output

Return the SQL query string.

सीमाएँ

1 ≤ हिस्सों की संख्या ≤ 20

कम से कम एक from हिस्सा; हर हिस्से में अधिकतम 100 कैरेक्टर

उदाहरण

उदाहरण 1
इनपुट:
parts = ["where age \u003e 18", "from users", "select name,age"]

अपेक्षित आउटपुट:
expected = "SELECT name, age FROM users WHERE age \u003e 18"
इनपुट:
std::vector<std::string> parts = {"where age \u003e 18", "from users", "select name,age"};

अपेक्षित आउटपुट:
std::string expected = "SELECT name, age FROM users WHERE age \u003e 18";
इनपुट:
string[] parts = new string[] {"where age \u003e 18", "from users", "select name,age"};

अपेक्षित आउटपुट:
string expected = "SELECT name, age FROM users WHERE age \u003e 18";

व्याख्या

Parts out of order आती हैं, लेकिन query हमेशा इस तरह बनती है SELECT … FROM … WHERE …: "SELECT name, age FROM users WHERE age > 18".

उदाहरण 2
इनपुट:
parts = ["from orders", "limit 10", "order total DESC"]

अपेक्षित आउटपुट:
expected = "SELECT * FROM orders ORDER BY total DESC LIMIT 10"
इनपुट:
std::vector<std::string> parts = {"from orders", "limit 10", "order total DESC"};

अपेक्षित आउटपुट:
std::string expected = "SELECT * FROM orders ORDER BY total DESC LIMIT 10";
इनपुट:
string[] parts = new string[] {"from orders", "limit 10", "order total DESC"};

अपेक्षित आउटपुट:
string expected = "SELECT * FROM orders ORDER BY total DESC LIMIT 10";

व्याख्या

select हिस्सा न होने पर कॉलम डिफ़ॉल्ट रूप से * होते हैं: "SELECT * FROM orders ORDER BY total DESC LIMIT 10"।

कैसे हल करें

पहले खुद कोशिश करें, फिर एक-एक करके संकेत खोलें।

संकेत 1

पहले हर हिस्से को उसके कीवर्ड से सहेजें; टेक्स्ट आख़िर में बनाएँ।

संकेत 2

उसी कीवर्ड वाला बाद का हिस्सा पहले वाले की जगह लेता है।

संकेत 3

SELECT लिस्ट के हर कॉलम से स्पेस हटाएँ और select हिस्सा न हो तो * लें।

अपेक्षित जटिलता

समय O(कुल लंबाई), अतिरिक्त स्थान O(कुल लंबाई)

संदर्भ

यह चुनौती CodeUtility के लिए अनुकूलित की गई है। ऊपर दिए गए स्टेटमेंट और सीमाओं का पालन करें।

दूसरों से सीखें

समुदाय समाधान

अभी तक कोई प्रकाशित समाधान नहीं। पहला साझा करने के लिए इस चुनौती को हल करें।