किसी विशिष्ट स्तंभ में दूसरा सबसे बड़ा पूर्णांक मान ज्ञात करने के लिए सबसे सरल SQL क्वेरी क्या है?
कॉलम में संभवतः डुप्लिकेट मान हैं।
किसी विशिष्ट स्तंभ में दूसरा सबसे बड़ा पूर्णांक मान ज्ञात करने के लिए सबसे सरल SQL क्वेरी क्या है?
कॉलम में संभवतः डुप्लिकेट मान हैं।
जवाबों:
SELECT MAX( col )
FROM table
WHERE col < ( SELECT MAX( col )
FROM table )
T-Sql में दो तरीके हैं:
--filter out the max
select max( col )
from [table]
where col < (
select max( col )
from [table] )
--sort top two then bottom one
select top 1 col
from (
select top 2 col
from [table]
order by col) topTwo
order by col desc
माइक्रोसॉफ्ट एसक्यूएल में पहला तरीका दूसरे की तुलना में दोगुना है, भले ही प्रश्न में कॉलम को क्लस्टर किया गया हो।
ऐसा इसलिए है क्योंकि तालिका या इंडेक्स स्कैन की तुलना में सॉर्ट ऑपरेशन अपेक्षाकृत धीमा है max
एकत्रीकरण का उपयोग ।
वैकल्पिक रूप से, Microsoft SQL 2005 और इसके बाद के संस्करण में आप ROW_NUMBER()
फ़ंक्शन का उपयोग कर सकते हैं :
select col
from (
select ROW_NUMBER() over (order by col asc) as 'rowNum', col
from [table] ) withRowNum
where rowNum = 2
मैं कुछ SQL सर्वर विशिष्ट और कुछ MySQL विशिष्ट समाधान यहाँ देख रहा हूँ, ताकि आप स्पष्ट कर सकें कि आपको किस डेटाबेस की आवश्यकता है। हालांकि अगर मुझे लगता था कि मुझे SQL सर्वर कहना होगा क्योंकि यह MySQL में तुच्छ है।
मैं कुछ समाधान भी देखता हूं जो काम नहीं करेंगे क्योंकि वे डुप्लिकेट के लिए संभावना को ध्यान में रखते हैं, इसलिए सावधान रहें कि आप किन चीजों को स्वीकार करते हैं। अंत में, मुझे कुछ दिखाई देता है जो काम करेगा लेकिन वह तालिका के दो पूर्ण स्कैन करेगा। आप यह सुनिश्चित करना चाहते हैं कि 2 स्कैन केवल 2 मानों को देख रहा है।
SQL सर्वर (2012 से पहले):
SELECT MIN([column]) AS [column]
FROM (
SELECT TOP 2 [column]
FROM [Table]
GROUP BY [column]
ORDER BY [column] DESC
) a
माई एसक्यूएल:
SELECT `column`
FROM `table`
GROUP BY `column`
ORDER BY `column` DESC
LIMIT 1,1
अपडेट करें:
SQL सर्वर 2012 अब एक बहुत क्लीनर (और मानक ) OFFSET / FETCH सिंटैक्स का समर्थन करता है:
SELECT TOP 2 [column]
FROM [Table]
GROUP BY [column]
ORDER BY [column] DESC
OFFSET 1 ROWS
FETCH NEXT 1 ROWS ONLY;
n
। यह एक परीक्षा है।
TOP
और OFFSET
उसी क्वेरी में।
मुझे लगता है कि आप कुछ ऐसा कर सकते हैं:
SELECT * FROM Table ORDER BY NumericalColumn DESC LIMIT 1 OFFSET 1
या
SELECT * FROM Table ORDER BY NumericalColumn DESC LIMIT (1, 1)
आपके डेटाबेस सर्वर पर निर्भर करता है। संकेत: SQL सर्वर LIMIT नहीं करता है।
OFFSET 2
आवेदन में निर्धारित इस परिणाम से दूसरा मूल्य प्राप्त करना सबसे आसान होगा:
SELECT DISTINCT value FROM Table ORDER BY value DESC LIMIT 2
लेकिन अगर आपको एसक्यूएल का उपयोग करके दूसरे मूल्य का चयन करना चाहिए, तो कैसे:
SELECT MIN(value) FROM (SELECT DISTINCT value FROM Table ORDER BY value DESC LIMIT 2) AS t
LIMIT
MySql सिंटैक्स है, प्रश्न SQL संस्करण निर्दिष्ट नहीं करता है।
आप निम्नलिखित क्वेरी का उपयोग करके कॉलम का दूसरा सबसे बड़ा मूल्य पा सकते हैं
SELECT *
FROM TableName a
WHERE
2 = (SELECT count(DISTINCT(b.ColumnName))
FROM TableName b WHERE
a.ColumnName <= b.ColumnName);
आप नीचे दिए गए लिंक पर अधिक जानकारी पा सकते हैं
http://www.abhishekbpatel.com/2012/12/how-to-get-nth-maximum-and-minimun.html
MSSQL
SELECT *
FROM [Users]
order by UserId desc OFFSET 1 ROW
FETCH NEXT 1 ROW ONLY;
माई एसक्यूएल
SELECT *
FROM Users
order by UserId desc LIMIT 1 OFFSET 1
उप प्रश्नों की कोई आवश्यकता नहीं है ... बस एक पंक्ति छोड़ें और अवरोही क्रम से दूसरी पंक्तियों का चयन करें
SELECT MAX(Salary) FROM Employee WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employee )
यह क्वेरी परिणाम से अधिकतम वेतन लौटाएगी - जिसमें समग्र तालिका से अधिकतम वेतन नहीं है।
यह बहुत ही सरल कोड है, आप इसे आजमा सकते हैं: -
ex: टेबल का नाम = परीक्षण
salary
1000
1500
1450
7500
2 सबसे बड़ा मूल्य पाने के लिए MSSQL कोड
select salary from test order by salary desc offset 1 rows fetch next 1 rows only;
यहाँ 'ऑफ़सेट 1 रो' का अर्थ है टेबल की दूसरी पंक्ति और 'अगली 1 पंक्तियाँ लाने के लिए' केवल 1 पंक्ति दिखाने के लिए है। यदि आप 'केवल अगली पंक्तियों को लाने' का उपयोग नहीं करते हैं तो यह दूसरी पंक्ति से सभी पंक्तियों को दिखाता है।
select * from (select ROW_NUMBER() over (Order by Col_x desc) as Row, Col_1
from table_1)as table_new tn inner join table_1 t1
on tn.col_1 = t1.col_1
where row = 2
आशा है कि किसी भी पंक्ति के लिए मान प्राप्त करने में मदद मिलेगी .....
टॉम, का मानना है कि यह तब विफल होगा जब select max([COLUMN_NAME]) from [TABLE_NAME]
अनुभाग में एक से अधिक मान लौटाए गए हों । यानी जहां डेटा सेट में 2 से अधिक मान हैं।
आपकी क्वेरी में थोड़ा संशोधन काम करेगा -
select max([COLUMN_NAME]) from [TABLE_NAME] where [COLUMN_NAME] **IN**
( select max([COLUMN_NAME]) from [TABLE_NAME] )
SELECT
*
FROM
table
WHERE
column < (SELECT max(columnq) FROM table)
ORDER BY
column DESC LIMIT 1
यह सबसे आसान तरीका है:
SELECT
Column name
FROM
Table name
ORDER BY
Column name DESC
LIMIT 1,1
जैसा कि आपने डुप्लिकेट मानों का उल्लेख किया है। ऐसे मामले में आप DISTINCT और GROUP BY का उपयोग कर सकते हैं दूसरे उच्चतम मूल्य का पता लगाने के लिए का
यहाँ एक टेबल है
वेतन
:
समूह द्वारा
SELECT amount FROM salary
GROUP by amount
ORDER BY amount DESC
LIMIT 1 , 1
DISTINCT
SELECT DISTINCT amount
FROM salary
ORDER BY amount DESC
LIMIT 1 , 1
लिमिट का पहला भाग = आरंभिक सूचकांक
लिमिट का दूसरा भाग = कितने मूल्य
select max(column_name) from table_name
where column_name not in (select max(column_name) from table_name);
ऐसी स्थिति में नहीं है जो column_name के उच्चतम मान को बाहर करती है।
संदर्भ: प्रोग्रामर साक्षात्कार
देखें कि SQL डेटाबेस तालिका में nth रो का चयन कैसे करें? ।
Sybase SQL कहीं भी समर्थन करता है:
SELECT TOP 1 START AT 2 value from table ORDER BY value
select top 1 MyIntColumn from MyTable
where
MyIntColumn <> (select top 1 MyIntColumn from MyTable order by MyIntColumn desc)
order by MyIntColumn desc