2017-06-07 6 views
0

私は大きなデータセットを持っており、特定の属性値の最も一般的な出現をどのように計算するのかと思っていました。制約に基づいて列の値の数を調べる方法は?

例えば、私はCatsと呼ばれる仮説テーブルを持っているとしましょう。私はそれに次の値を挿入します。

Create table Cats (Cat_ID int, Cat_name varchar(max), Cat_Hometown varchar(max), Gender varchar(max), Birth_Year int) 

INSERT INTO CATS (Cat_ID, Cat_Name, Cat_Hometown, Gender, Birth_year) 
VALUES (1, 'Blue','Boston','M', 1980), 
(2, 'Steamer','Plymouth','F', 1999), 
(3, 'Stack','Newton','F', 1980), 
(4, 'Overflow','Boston','M', 1978), 
(5, 'CatorDog','Allston','F', 1999); 

私は1980年に女性の猫のための最も一般的な都市を決定したい場合は?どうすればいい?私はそれの周りに私の頭を包むように見えることはできません。

+0

条件aggregration? gender = 'F'、birth_year <= 1980 cat_hometown order by cnt desc'のcat_homeTown、sum(birth_year <= 1980、gender = 'F'、then else 0 end)を選択します。 – xQbert

+0

なぜ<演算子を使用しましたか?私はちょうど1980年の値を知りたいと思っています –

+0

要件が不明だったので。あなたは "1980年に女性の猫"と言いましたが、あなたは生まれているとは言いませんでしたので、1980年以前に生まれた猫が私に生きていると考えました。私はdescを注文したので、ただ一つのレコードが欲しかった。カウントでは最高のカウントがトップになるのでダウンします。 – xQbert

答えて

0
create table #Cats (Cat_ID int, Cat_name varchar(max), cat_hometown varchar(max), Gender varchar(max), Birth_Year int) 

INSERT Into #CATS (Cat_ID, Cat_Name, Cat_Hometown, Gender, Birth_year) 
VALUES (1, 'Blue','Boston','M', 1980), 
(2, 'Steamer','Plymouth','F', 1999), 
(3, 'Stack','Newton','F', 1980), 
(4, 'Overflow','Boston','M', 1978), 
(5, 'CatorDog','Allston','F', 1999); 

;with cat_count as (
select count(1) NumberofCats, Cat_Hometown from #Cats 
where Gender = 'F' 
and Birth_year = 1980 
group by cat_hometown 
) 

select Cat_Hometown from cat_count 
where NumberofCats = (select max(numberofcats) from cat_count) 
+0

とmysqlでうまく動作しません...または変更されています。 – xQbert

2

以下のクエリを試すことができます。誕生年の

select Cat_Hometown, count(Cat_Hometown) as Cats_Count from Cats where gender='F' and Birth_year=1980 group by Cat_Hometown order by count(Cat_Hometown) desc limit 1;

:)

関連する問題