私は4つのテーブルを持っています:tblnames、tblcountryとtblcountry_link、tblgender。MYSQLグループ化とカウント数
名前が複数の国を持つことができるように、tblcountry_linkは名前と国の表を結合します。
tblnames:
NameID |名前| GenderID
- アーサー2
- エイミー1
- オーブリー1
- オーブリー2
tblcountry
CountryID |カントリー|国籍
- アフガニスタンアフガン
- アルゼンチンアルゼンチン
tblcountry_link
名前ID |国ID
- 1 | 1
- 1 | 2
- 2 | 1
tblgender
GenderID |性別
- 1 |女性
- 2 |男性
各国または国籍のUnisexの名前のリストを希望します。これは、自分の選択した開始文字を使用します。
- アフガニスタン(3)
- アルゼンチン(5)...
私はカウントを使用し、「名前」欄に持つことでユニセックスな名前のリストを見つける方法を知っていると国籍別に分類する。これは私に結果を与える
{SELECT co.Nationality, COUNT(*)
FROM (
SELECT n.Name, COUNT(n.Name) AS Countname, SUBSTR(Name, 1, 1) AS firstletter, g.Gender, cl.CountryID, c.Country, c.Nationality
FROM tblnames AS n
INNER JOIN tblgender AS g ON n.GenderID = g.GenderID
INNER JOIN tblcountry_link AS cl ON cl.NameID = n.NameID
INNER JOIN tblcountry AS c ON cl.CountryID = c.CountryID
WHERE n.name LIKE CONCAT( 'A', '%')
AND c.Nationality = 'Afghan'
GROUP BY n.Name
HAVING Countname >1
) AS co
アフガン(3)私は結果が正しくないWhere句のアフガニスタンの一部を削除する場合は
。私が望むものを得るためにこのクエリにさまざまな調整を試みましたが、結果は正しく見えません。
私は両方の性別(または、これをWhere句に追加すると実際には男性または女性)の各国または国籍を取得することもできます。
{SELECT cl.CountryID, c.Country, COUNT(n.Name) AS Countname
FROM tblnames AS n
INNER JOIN tblcountry_link AS cl ON cl.NameID = n.NameID
INNER JOIN tblcountry AS c ON cl.CountryID = c.CountryID
WHERE n.name LIKE CONCAT('A', '%')
GROUP BY c.Country}
国ID |カントリー|カウント名
- AF |アフガニスタン| 624
- AR |アルゼンチン| 28
- AM |アルメニア| 5 ...
しかし、私は国籍別にユニセックス名の数をリストするのに苦労しています。
最初の例でHaving句を後者に組み合わせようとしましたが、これは機能しません。 名前が一致する男性と女性の2つのサブクエリに参加しようとしましたが、グループ化して正しくカウントできませんでした。 第1の例を使用して派生テーブルを試しましたが、1列しか使用できません。これは2です。
これは機能しますが、私が望むものではありません。私はカウントの列が男性と女性の両方である名前を数えるために必要です - したがってユニセックス - 国別にグループ化されています。 – thunderousity
私は今それを得ると思います。私は数時間で私の記事を解決するつもりです。まだ投稿されていない場合。 – noyanc