का उपयोग करते हुए count(*) over(partition by...)
प्रदान करता है एक सरल और प्रभावी साधन अवांछित पुनरावृत्ति पता लगाने के लिए, जबकि भी सभी प्रभावित पंक्तियों और सभी चाहते थे कॉलम सूची:
SELECT
t.*
FROM (
SELECT
s.*
, COUNT(*) OVER (PARTITION BY s.name, s.city) AS qty
FROM stuff s
) t
WHERE t.qty > 1
ORDER BY t.name, t.city
जबकि अधिकांश हाल के RDBMS संस्करण count(*) over(partition by...)
MySQL V 8.0 को "विंडो फ़ंक्शंस" के रूप में समर्थन करते हैं, जैसा कि नीचे देखा गया है (MySQL 8.0 में)
CREATE TABLE stuff(
id INTEGER NOT NULL
,name VARCHAR(60) NOT NULL
,city VARCHAR(60) NOT NULL
);
INSERT INTO stuff(id,name,city) VALUES
(904834,'jim','London')
, (904835,'jim','London')
, (90145,'Fred','Paris')
, (90132,'Fred','Paris')
, (90133,'Fred','Paris')
, (923457,'Barney','New York') # not expected in result
;
SELECT
t.*
FROM (
SELECT
s.*
, COUNT(*) OVER (PARTITION BY s.name, s.city) AS qty
FROM stuff s
) t
WHERE t.qty > 1
ORDER BY t.name, t.city
आईडी | नाम | शहर | मात्रा
-----: | : --- | : ----- | -:
90145 | फ्रेड | पेरिस | 3
90132 | फ्रेड | पेरिस | 3
90133 | फ्रेड | पेरिस | 3
904834 | जिम् | लंदन | 2
904835 | जिम् | लंदन | 2
db <> फिडल यहां
विंडो फ़ंक्शन। MySQL अब विंडो फ़ंक्शंस का समर्थन करता है, जो क्वेरी से प्रत्येक पंक्ति के लिए, उस पंक्ति से संबंधित पंक्तियों का उपयोग करके गणना करता है। इनमें RANK (), LAG (), और NTILE () जैसे फ़ंक्शन शामिल हैं। इसके अलावा, कई मौजूदा कुल कार्यों को अब विंडो फ़ंक्शन के रूप में उपयोग किया जा सकता है; उदाहरण के लिए, SUM () और AVG ()। अधिक जानकारी के लिए, खंड 12.21, “विंडो फ़ंक्शंस” देखें ।
name
याcity
शामिल हैnull
, तो वे बाहरी क्वेरी में रिपोर्ट किए जाने में विफल रहेंगे, लेकिन आंतरिक क्वेरी में मिलान किया जाएगा।