2014-02-12 2 views
0

나는이 관계가있다; 국가 (이름, 코드, 수도, 지방, 지역, 인구)SQL 함수 및 결과 별 정렬?

여기서 각 언어의 원어민 인원수로 언어 (이름)를 구하고 싶습니다. .

나는 거의 이것으로 끝났다고 확신하지만 count (l.name)에 대한 계산은 "ORDER BY"가 실제로 사용되는 것의 중단을 생각하지 않았다. 지저분 해지고 나만이 값 "1"을 얻는다.이 데이터베이스에는 특정 언어가 여러 나라에서 사용되는 정보가 포함되어 있다는 것을 확실히 알고있다.

다른 모든 행은 괜찮습니다. "SpokenIn"관계 만 지저분합니다. 내가 잘못 뭐하는 거지 :(

내가 PostgreSQL을 사용하고 있습니다.

+0

음, 첫째, 당신은 정말 필요하지 않습니다 group by 절과 같은 DISTINCT 한정자는 개수를 기반으로 할 필드를 지정합니다. DISTINCT가 각 결과에 대해 하나의 행을 제공하기 때문에 "1"이 계산됩니다. 둘째, 국가 별 백분율 계산 *을하려하지만 전체 언어에 대해 계산하려고하는 것 같습니다 ... –

+0

'COUNT' 대신'SUM'을 사용하면' 1.name'? – Sev09

+0

이 쿼리에서'ORDER BY'는 어디에 있는가, 아마도'GROUP BY'를 의미할까요? –

답변

0

난 더 PostgreSQL의 전문가는 아니지만하지만 난 당신이 저 작은 그룹의 실수를 생각합니다. 당신이 NativeSpeakers 칼럼을 통해 그룹화되어 있지만, 실제로의 합을 원하는 ? http://www.sqlfiddle.com/#!15/0d0bc/3

0

방금 ​​많은 사람들이 각 언어를 구사 방법을 알아 내려고 노력 그렇다면,이 m 위치 : 당신이 더 많은 일부 바이올린하려면

SELECT l.name, count(c.name) as SpokenIn, 
sum(l.percentage*c.population) as NativeSpeakers 
FROM (country c 
JOIN language l 
ON c.code = l.country) 
GROUP BY l.name; 

:. 모든 nativespeakers는 다음을 시도하십시오

SELECT DISTINCT l.name, sum(l.percentage*c.population) as SpokenBy 
    FROM (country c 
    JOIN language l 
    ON c.code = l.country) 
    GROUP BY l.Name 
+0

Doh! 피 에테르가 저를 때려 눕혔습니다. – Ash8087

+0

사실 ... 모든 원어민의 합계를 더했습니다. 국가/언어별로 한 줄 씩 원했을 수도 있습니다. 그런 다음 솔루션이 더 적합합니다. 그가 무엇을하려고하는지는 분명하지 않습니다 ... – Pieter

1

시도 : ight 질의 구조에 더 좋은 방법이 될

select l.name, 
     counter.num_countries as SpokenIn, 
     sum(l.percentage * c.population) as NativeSpeakers 
    from country c 
    join language l 
    on c.code = l.country 
    join (select name, count(country) as num_countries 
      from language 
     group by name) counter 
    on l.name = counter.name 
group by l.name, counter.num_countries 

편집 - 고정 맞춤법 오류 "카운티"대 국가