我有一个包含以下架构的数据库:
id: int
名称: varchar
电子邮件: varchar
facebook: varchar(可能的值:Y或N)
twitter: varchar(可能的值:Y或N)
时间:时间戳(创建时间戳)
我们可以为同一个人提供多行,其中facebook,twitter和时间可能/会有所不同。 我想查询我最终需要以下内容:
名称
电子邮件
total_count (电子邮件的总行数)
total_facebook_yes (Facebook电子邮件的YES总数)
total_twitter_yes (Twitter电子邮件的YES总数)
last_time (电子邮件最新行的时间戳)
我坚持写一个查询。任何人都可以指导我。请帮忙。 :(
答案 0 :(得分: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。
答案 1 :(得分: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