0

我有一个具有以下架构的数据库:

编号:整数

名称: varchar

电子邮件: varchar

facebook: varchar(可能的值:Y 或 N)

twitter: varchar(可能的值:Y 或 N)

时间:时间戳(创建时间戳)

我们可以为同一个人设置多行,其中 facebook、twitter 和时间可能/会有所不同。我想在我最终想要以下内容的地方进行查询:

姓名

电子邮件

total_count(电子邮件的总行数)

total_facebook_yes(电子邮件的 Facebook YES 总数)

total_twitter_yes(电子邮件的 Twitter 是的总数)

last_time(电子邮件最新行的时间戳)

我一直在写一个查询。谁能指导我。请帮忙。:(

4

2 回答 2

2

您不需要连接查询,您需要一个具有计数和最大功能的组。

就像是:

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

由于对架构的了解有限,我建议您考虑将表拆分为具有关系的多个表。从 wiki 3th-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 回答