MYSQL COUNT pro Land

madirfan

Erfahrenes Mitglied
hi,

hab diese query um eine auswertung des COUNTRY_CODE "DEU" zu bekommen.
ich möchte für jedes COUNTRY_CODE diese auswertung haben , ohne expleziet das COUNTRY_CODE im code zu definieren..
irgend eine idee?

Code:
Select COUNT(ORDER1_ID) AS ORDER1,
       COUNT(ORDER2_ID) AS ORDER2,
       COUNT(ORDER8_ID) AS ORDER8
  from RDF_ADMIN_HIERARCHY ahr
  left join RDF_FEATURE_NAMES fns1 on ahr.ORDER1_ID = fns1.FEATURE_ID and 'N' = fns1.IS_EXONYM and 'B' = fns1.NAME_TYPE and 'A' = fns1.OWNER
  left join RDF_FEATURE_NAME  fne1 on fns1.NAME_ID = fne1.NAME_ID
  left join RDF_FEATURE_NAME_TRANS fnt1 on fns1.NAME_ID = fnt1.NAME_ID
  left join RDF_FEATURE_NAMES fns2 on ahr.ORDER2_ID = fns2.FEATURE_ID and 'N' = fns2.IS_EXONYM and 'B' = fns2.NAME_TYPE and 'A' = fns2.OWNER
  left join RDF_FEATURE_NAME  fne2 on fns2.NAME_ID = fne2.NAME_ID
  left join RDF_FEATURE_NAME_TRANS fnt2 on fns2.NAME_ID = fnt2.NAME_ID
  left join RDF_FEATURE_NAMES fns3 on ahr.ORDER8_ID = fns3.FEATURE_ID and 'N' = fns3.IS_EXONYM and 'B' = fns3.NAME_TYPE and 'A' = fns3.OWNER
  left join RDF_FEATURE_NAME  fne3 on fns3.NAME_ID = fne3.NAME_ID
  left join RDF_FEATURE_NAME_TRANS fnt3 on fns3.NAME_ID = fnt3.NAME_ID
  left join RDF_FEATURE_NAMES fns4 on ahr.BUILTUP_ID = fns4.FEATURE_ID and 'N' = fns4.IS_EXONYM and 'B' = fns4.NAME_TYPE and 'A' = fns4.OWNER
  left join RDF_FEATURE_NAME  fne4 on fns4.NAME_ID = fne4.NAME_ID
  left join RDF_FEATURE_NAME_TRANS fnt4 on fns4.NAME_ID = fnt4.NAME_ID

 where ahr.ISO_COUNTRY_CODE = 'DEU'
 
Wenn ich wüsste wie a) die Tabellen zusammenhängen und b) was du genau haben willst, könnte ich dir ev. besser helfen.

Ansonsten mach doch einfach ein GROUP BY über den country_code
SQL:
SELECT 
    ahr.country_code,
    COUNT(ahr.order1_id) AS order1, 
    COUNT(ahr.order2_id) AS order2, 
    COUNT(ahr.order8_id) AS order8 
FROM 
    rdf_admin_hierarchy ahr
    LEFT JOIN ....
GROUP BY
    ahr.country_code
 
Zuletzt bearbeitet von einem Moderator:
OK.. momentan ist es so, dass wenn ich diese query starte also fuer "DEU", bekomme ich ein resultat=
Order1=55555
order2=66666
order8=77777

ISO_COUNTRY_CODE tabelle hat aber noch 60 weitere countrycodes wie "ESP,ITA etc"

was ich habe wollte ist, ich brauch eine möglichkeit, um direkt zu sehen dass z.b:
DEU = oder1=55555, oder2=66666, oder8=77777
ESP = oder1=111111, oder2=222222, oder8=333333 etc..
 
Ich habe da noch eine Frage zu dre Query!
Ich würde gern noch das POSTAL_CODE COUNTen, dass aber in einer anderen tabelle ist.

Wenn ich die aktuelle Query "siehe oben" laufen lasse,
bekomme ich für die Tabelle " RDF_ADMIN_HIERARCHY" eine COUNTRY_ID .

Ich habe eine tabelle Names "RDF_POSTAL_AREA" wo ebenfalls COUNTRY_ID sowie POSTAL_CODE enthalten ist.

Was ich benötige:
Code:
Select 
      ahr.ISO_COUNTRY_CODE,
       COUNT(distinct ahr.ORDER1_ID) AS ORDER1_State,
       COUNT(distinct ahr.ORDER2_ID) AS ORDER2_Country,
       COUNT(distinct ahr.ORDER8_ID) AS ORDER8_City


      from RDF_ADMIN_HIERARCHY ahr

  left join RDF_FEATURE_NAMES fns1 on ahr.ORDER1_ID = fns1.FEATURE_ID and 'N' = fns1.IS_EXONYM and 'B' = fns1.NAME_TYPE and 'A' = fns1.OWNER
  left join RDF_FEATURE_NAME  fne1 on fns1.NAME_ID = fne1.NAME_ID
  left join RDF_FEATURE_NAME_TRANS fnt1 on fns1.NAME_ID = fnt1.NAME_ID
  left join RDF_FEATURE_NAMES fns2 on ahr.ORDER2_ID = fns2.FEATURE_ID and 'N' = fns2.IS_EXONYM and 'B' = fns2.NAME_TYPE and 'A' = fns2.OWNER
  left join RDF_FEATURE_NAME  fne2 on fns2.NAME_ID = fne2.NAME_ID
  left join RDF_FEATURE_NAME_TRANS fnt2 on fns2.NAME_ID = fnt2.NAME_ID
  left join RDF_FEATURE_NAMES fns3 on ahr.ORDER8_ID = fns3.FEATURE_ID and 'N' = fns3.IS_EXONYM and 'B' = fns3.NAME_TYPE and 'A' = fns3.OWNER
  left join RDF_FEATURE_NAME  fne3 on fns3.NAME_ID = fne3.NAME_ID
  left join RDF_FEATURE_NAME_TRANS fnt3 on fns3.NAME_ID = fnt3.NAME_ID
  left join RDF_FEATURE_NAMES fns4 on ahr.BUILTUP_ID = fns4.FEATURE_ID and 'N' = fns4.IS_EXONYM and 'B' = fns4.NAME_TYPE and 'A' = fns4.OWNER
  left join RDF_FEATURE_NAME  fne4 on fns4.NAME_ID = fne4.NAME_ID
  left join RDF_FEATURE_NAME_TRANS fnt4 on fns4.NAME_ID = fnt4.NAME_ID
  
  GROUP BY ahr.ISO_COUNTRY_CODE
;


Ich möchte gern die POSTCODEs counten.

Wichtig ist, dass durch die tabelle RDF_ADMIN_HIERARCHY bekomme ich die COUNTRY_ID , die dann in die Tabell RDF_POSTAL_AREA geht um die POSTCODES zu finden..
 
Als erstes. Schmeiss mal die ganzen LEFT JOUINS raus. die brauchst du nicht. Alle Felder die du ausgibst sind aus der ahr-Tabelle.

Dann könnte das ganze so aussehen (ohne deine alten JOINs!)
SQL:
SELECT 
    ahr.iso_country_code,
    pa.postal_code, 
    COUNT(DISTINCT ahr.order1_id) AS order1_state, 
    COUNT(DISTINCT ahr.order2_id) AS order2_country, 
    COUNT(DISTINCT ahr.order8_id) AS order8_city 
FROM 
    rdf_admin_hierarchy 		ahr
    LEFT JOIN rdf_postal_area 	pa
    	ON ahr.country_id = pa.country_id
GROUP BY 
    ahr.iso_country_code,
    pa.postal_code
 
Zuletzt bearbeitet von einem Moderator:
hab die LEFT JOUINS rausgenommen..

Code:
SELECT 
    ahr.iso_country_code,
    pa.postal_code, 
    COUNT(DISTINCT ahr.order1_id) AS order1_state, 
    COUNT(DISTINCT ahr.order2_id) AS order2_country, 
    COUNT(DISTINCT ahr.order8_id) AS order8_city 
FROM 
    rdf_admin_hierarchy         ahr
    LEFT JOIN rdf_postal_area   pa
        ON ahr.country_id = pa.country_id
GROUP BY 
    ahr.iso_country_code,
    pa.postal_code

Problem in dieser query ist, dass es extrem lange dauert und es auszuwerten..
hab das fuer 5min laufen lassen und sqlDev. ist immer noch am arbeiten... ;(
 
Dann solltest du mal indexe setzen. Zudem ev. den LEFT JOIN durch ein INNER JOIN ersetzen falls sicher ist dass zu jedem ahr-Eitnrag ein pa exisitiert
 
Habs mit folgenden querys getestet.. leider immer das selbe verhalten...
anyway.. wenn das dann doch funktioniert..wie müsste ich das dann counten?

Code:
SELECT 
    ahr.iso_country_code,
    pa.postal_code, 
    COUNT(DISTINCT ahr.order1_id) AS order1_state, 
    COUNT(DISTINCT ahr.order2_id) AS order2_country, 
    COUNT(DISTINCT ahr.order8_id) AS order8_city 
FROM 
    rdf_admin_hierarchy         ahr
    inner JOIN rdf_postal_area   pa
        ON ahr.country_id = pa.country_id
GROUP BY 
    ahr.iso_country_code,
    pa.postal_code

Code:
SELECT 
    ahr.ISO_COUNTRY_CODE,
    pa.POSTAL_CODE, 
    COUNT(DISTINCT ahr.order1_id) AS order1_state, 
    COUNT(DISTINCT ahr.order2_id) AS order2_country, 
    COUNT(DISTINCT ahr.order8_id) AS order8_city 
    
FROM 
    rdf_admin_hierarchy ahr , 
    RDF_POSTAL_AREA pa
WHERE 
         ahr.COUNTRY_ID = pa.COUNTRY_ID
GROUP BY 
    ahr.ISO_COUNTRY_CODE,
    pa.POSTAL_CODE
 

Neue Beiträge

Zurück