如何在MySql中编写连接查询?

时间:2013-03-03 10:40:51

标签: mysql sql join

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

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 (电子邮件最新行的时间戳)

我坚持写一个查询。任何人都可以指导我。请帮忙。 :(

2 个答案:

答案 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