2016-08-01 6 views
1

私は検索結果を表現するのに苦労しています。これは愚かな質問である場合には謝ります。私は、以下のようにテーブルに対してSQLでクエリを記述しようとしています:グループByと列全体との区別方法

Country Unique_ID 
US   123 
US   124 
UK   125 
Australia 126 

が出力フォローテーブルそれ:私はcountryidを選択して、個別の国を数えることができます知っている

Country Count_Distinct 
US   2 
UK   1 
Australia 1 
All  4 

私が知っているのは、「すべて」の番号を取得するために国コードを区別することができます。私は2つの別々のクエリではない出力を得るためにクエリを書く方法を理解できません。

情報や説明が必要な場合は、教えてください。ありがとう!

+1

あなたの例では、米国のIDが123と124の代わりに123と124の代わりに "Count Distinct"が2ではなく1になるでしょうか? – kbball

+0

@kbballそれは私がそれを解釈する方法ですが、列名 'Unique_ID'は複製が不可能であることを示唆しています。カウントに 'distinct 'を追加することは傷つくことはありませんが、より多くのコードノイズです... – Bohemian

答えて

4

使用WITH ROLLUP

select Country, count(distinct Unique_ID) Count_Distinct 
from mytable 
group by Country 
with rollup 

テキストをしたい場合は、「すべて」(デフォルトで国のnullを取得)、「すべて」にヌルを変更するために別のクエリでそれをラップ:

テーブルから数える明確な として

国を選択して、カウント数(個別のUNIQUE_ID):

select coalesce(Country, "All") Country, Count_Distinct 
from (
    select Country, count(distinct Unique_ID) Count_Distinct 
    from mytable 
    group by Country 
    with rollup 
) x 
+0

あなたはCount_Distinctの前にASが不足しています – kbball

+0

' ifnull(country、' All ') 'を使用する方が良いでしょう。サブクエリは必要ありません。 – sgeddes

+0

@kbball "AS"はオプションです。私はより少ないノイズを好む。 – Bohemian

0

は、あなたはこれを試してみてくださいすることができグループ別ロールアップ(国)

関連する問題