SQL एकत्रीकरण द्वारा मान का एकल स्तंभ

0

सवाल

चलो मान मैं एक टेबल पर इस तरह:

आईडी url
1 11.22.33
2 11.22.33
3 domain.com
4 domain2.com
5 domain.com
6 10.100.15
7 domain3.com
8 172.100.15
9 172.100.15

इस तालिका में, कुछ आईपी पते के साथ जुड़े रहे हैं कुछ डोमेन और हम कर सकते हैं उन पर विचार किया जा रहा है एक URL. (उदाहरण के लिए, domain2.com, 10.100.15, 11.22.33 - यह domain2.com; 172.100.15, domain3.com - domain3.com, आदि). मेरा काम है कि मैं है की गणना करने के लिए पंक्तियों के साथ अलग डोमेन और एक तालिका बनाने के लिए इस तरह:

url गिनती
domain2 4
डोमेन 2
domain3 2

मैं सिर्फ उन्हें गिनती कई प्रश्नों के साथ, इस तरह के रूप में:

SELECT COUNT(*) 
FROM table1
WHERE (table1.url = “10.100.15”
    OR table1.url = “11.22.33” OR table1.url = “domain2.com”)

और इस तालिका को मैन्युअल रूप से, लेकिन यह अच्छा नहीं है.

कैसे मैं यह कर सकता में एक ही प्रश्न?

पुनश्च: में वर्णित के रूप में टिप्पणी के नीचे, हमेशा की तरह एकत्रीकरण किया जा सकता है के साथ एक सरल प्रश्न:

SELECT url, count(*) 
FROM table1
WHERE GROUP BY url

लेकिन यह मुझे देता है, केवल मेज पर इस तरह:

URL गिनती
domain2 1
डोमेन 2
11.22.33 2
10.100.15 1

या मैं कुछ याद आ रही है?

case count group-by sql
2021-11-14 12:20:36
3

सबसे अच्छा जवाब

1

आप कर सकते हैं समूह द्वारा एक CASE अभिव्यक्ति:

SELECT CASE 
         WHEN URL IN ('10.100.15', '11.22.33', 'domain2.com') THEN 'domain2.com'
         WHEN URL IN ('172.100.15', 'domain3.com') THEN 'domain3.com'
         ELSE URL
       END domain,
       COUNT(*) count
FROM tablename
GROUP BY domain;

देखें डेमो.

2021-11-14 13:52:59

शांत! धन्यवाद! बस मैं क्या जरूरत है.
Pavel Grebenyuk
1

एक और अधिक सुंदर तरीका है है करने के लिए एसोसिएशन के डेटाबेस में संग्रहीत करने के लिए प्राप्त है कि:

WITH
-- your input ...
indata(Id,url) AS (
          SELECT 1,'11.22.33'
UNION ALL SELECT 2,'11.22.33'
UNION ALL SELECT 3,'domain.com'
UNION ALL SELECT 4,'domain2.com'
UNION ALL SELECT 5,'domain.com'
UNION ALL SELECT 6,'10.100.15'
UNION ALL SELECT 7,'domain3.com'
UNION ALL SELECT 8,'172.100.15'
UNION ALL SELECT 9,'172.100.15'
)
,
-- need an association table - which "url" belongs to which domain
assoc(dom,url) AS (
            SELECT 'domain2.com','10.100.15'
  UNION ALL SELECT 'domain2.com','11.22.33'
  UNION ALL SELECT 'domain3.com','172.100.15'
)
SELECT
  CASE 
    WHEN a.dom IS NULL THEN i.url
    ELSE a.dom
  END AS domain
, COUNT(*) AS counter
FROM indata AS i
LEFT
JOIN assoc  AS a USING(url)
GROUP BY domain
;

-- out
-- out    domain    | counter
-- out -------------+---------
-- out  domain2.com |       4                                                                                                                                                                             
-- out  domain3.com |       3
-- out  domain.com  |       2
-- out (3 rows)
2021-11-14 13:46:49

आम तौर पर बोल, यह एक चालाक दृष्टिकोण है, हालांकि थोड़ा निरर्थक मेरे मामले में. वैसे भी, धन्यवाद! यह काम किया जा सकता है.
Pavel Grebenyuk
0

आप का उपयोग करना चाहिए समूह द्वारा समारोह और लिखने के अपने कोड में इस तरह:

का चयन करें यूआरएल, count(*) से table1 जहां यूआरएल('domain1','domain2') समूह द्वारा (URL)

यह काम करेगा!

2021-11-14 16:28:37

नहीं, यह नहीं है. यह मुझे देता है के द्वारा गिनती हर यूआरएल. मैं गठबंधन करने के लिए कुछ पंक्तियाँ है कि आवंटित करने के लिए एक डोमेन.
Pavel Grebenyuk

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में