0

私は次のスキーマを持つデータベースを持っています:

id: int

名前: varchar

メール: varchar

facebook: varchar(可能な値:YまたはN)

twitter: varchar(可能な値:YまたはN)

時間:タイムスタンプ(タイムスタンプの作成)

フェイスブック、ツイッター、時間は変わるかもしれないし、変わるかもしれない同じ人のために複数の行を持つことができます。最終的に次のクエリが必要な場所でクエリを実行したいと思います。

名前

Eメール

total_count(電子メールの行の総数)

total_facebook_yes(Facebookの電子メールのYESの総数)

total_twitter_yes(TwitterのメールのYESの総数)

last_time(電子メールの最新の行からのタイムスタンプ)

クエリを書くのに行き詰まっています。誰かが私を導くことができますか?助けてください。:(

4

2 に答える 2

2

結合クエリは必要ありません。count関数とmax関数を持つグループが必要です。

何かのようなもの:

select
    name,
    email,
    count(name) as total_count,
    sum(facebook = 'y') as total_facebook_yes,
    sum(case when twitter = 'y' then 1 else 0 end) as total_twitter_yes,
    max(time) as last_time
from `table_name`
group by name, email

スキーマに関する知識が限られているので、リレーションを使用してテーブルを複数のテーブルに分割することを検討することをお勧めします。まず、 wiki3th -normal-formをご覧ください。

于 2013-03-03T10:45:44.197 に答える
0

期待される結果を見て、JOINはどこで行われると思いますか?これを試して。Mysqlは、ブールラッピングに関して寛容です。

SELECT NAME, EMAIL, COUNT(FACEBOOK='yes') as FBTOTAL_Count, COUNT(Twitter='yes') as TOTALTW_Count
FROM YOURTABLE
GROUP BY FACEBOOK, TWITTER, NAME, EMAIL
于 2013-03-03T10:54:09.057 に答える