मैं प्रत्येक शहर की लोकप्रिय शैली को जानने की कोशिश कर रहा हूं। मैं केवल उन पंक्तियों को प्राप्त करने का प्रयास कर रहा हूं जिन्हें मैंने हाइलाइट किया है। मैंने समूह पर MAX() का उपयोग करने का प्रयास किया लेकिन मुझे एक वाक्यविन्यास त्रुटि दी।

मेरी सीटीई क्वेरी इस प्रकार है, यह डीबीवर नमूना डेटासेट पर आधारित है:

with q_table
as 
(   select City, Genre, count(*) as counts
    from 
        (select c.City, g.Name as Genre
        from bus5dwr.dbeaver_sample.Customer c
        inner join bus5dwr.dbeaver_sample.Invoice i
            on i.CustomerId = c.CustomerId
        inner join bus5dwr.dbeaver_sample.InvoiceLine il
            on il.InvoiceId = i.InvoiceId 
        inner join bus5dwr.dbeaver_sample.track t
            on t.TrackId = il.TrackId 
        inner join bus5dwr.dbeaver_sample.Genre g
            on g.GenreId = t.GenreId 
        where Country = 'USA'
        ) as t2
    group by City, Genre)

मैंने निम्नलिखित क्वेरी की कोशिश की।

Screenshot of query output

0
Ryukojin 12 अगस्त 2020, 12:45

3 जवाब

सबसे बढ़िया उत्तर

मेरे पास इसका परीक्षण करने के लिए डेटासेट नहीं है, लेकिन आप अपने सीटीई में केवल एक ROW_NUMBER() फ़ंक्शन जोड़ने में सक्षम होना चाहिए ताकि आप जो मान खोज रहे हैं उसे प्राप्त कर सकें। जैसे कि:

with q_table
as 
(   select City, Genre, count(*) as counts,
    ,ROW_NUMBER() OVER(partition by City order by count(*) desc) RN
    from 
        (select c.City, g.Name as Genre
        from bus5dwr.dbeaver_sample.Customer c
        inner join bus5dwr.dbeaver_sample.Invoice i
            on i.CustomerId = c.CustomerId
        inner join bus5dwr.dbeaver_sample.InvoiceLine il
            on il.InvoiceId = i.InvoiceId 
        inner join bus5dwr.dbeaver_sample.track t
            on t.TrackId = il.TrackId 
        inner join bus5dwr.dbeaver_sample.Genre g
            on g.GenreId = t.GenreId 
        where Country = 'USA'
        ) as t2
    group by City, Genre)

SELECT City, Genre, Counts 
from q_table
WHERE RN=1
Order BY City
3
JMabee 12 अगस्त 2020, 13:13

MAX का यह प्रयोग काम करना चाहिए।

संपादित करें; जोड़ा गया आंतरिक जुड़ाव। इस अवलोकन के लिए Gordon-linoff को धन्यवाद कि मेरे मूल उत्तर ने वास्तव में कुछ हासिल नहीं किया।

with q_table
as 
(   select City, Genre, count(*) as counts
    from 
        (select c.City, g.Name as Genre
        from bus5dwr.dbeaver_sample.Customer c
        inner join bus5dwr.dbeaver_sample.Invoice i
            on i.CustomerId = c.CustomerId
        inner join bus5dwr.dbeaver_sample.InvoiceLine il
            on il.InvoiceId = i.InvoiceId 
        inner join bus5dwr.dbeaver_sample.track t
            on t.TrackId = il.TrackId 
        inner join bus5dwr.dbeaver_sample.Genre g
            on g.GenreId = t.GenreId 
        where Country = 'USA'
        ) as t2
    group by City, Genre)
SELECT a.City, a.Genre, a.counts
FROM q_table a
INNER JOIN (
    SELECT City, MAX(counts) counts
    FROM q_table
    GROUP BY City
) b ON a.City = b.City AND a.counts = b.counts;
1
John Mitchell 12 अगस्त 2020, 14:46

ये कोशिश करें

 with q_table
 as 
 (select * from (
 (   select City, Genre, count(*) as counts
 from 
    (select c.City, g.Name as Genre
    from bus5dwr.dbeaver_sample.Customer c
    inner join bus5dwr.dbeaver_sample.Invoice i
        on i.CustomerId = c.CustomerId
    inner join bus5dwr.dbeaver_sample.InvoiceLine il
        on il.InvoiceId = i.InvoiceId 
    inner join bus5dwr.dbeaver_sample.track t
        on t.TrackId = il.TrackId 
    inner join bus5dwr.dbeaver_sample.Genre g
        on g.GenreId = t.GenreId 
    where Country = 'USA'
    ) as t2
 group by City, Genre)) as t3 where count in (select max(count) count from t3 group by city)
-1
chris 12 अगस्त 2020, 14:29