2013-03-03 92 views
0

我已经与下列模式的数据库:如何在MySql中编写连接查询?

ID: INT

名称: VARCHAR

电子邮件: VARCHAR

Facebook的: VARCHAR(可能值:Y或N)

叽叽喳喳: VARCHAR(可能的值:Y或N)

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

我们可以有多个行为同一人,其中Facebook,Twitter和时间可以/将变化。 我想打一个查询,我终于想以下几点:

电子邮件

TOTAL_COUNT(行对电子邮件的总数)

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

total_twitter_yes(YES的Twitter的总数为电子邮件)

:LAST_TIMEBREAK(从最新的一行电子邮件的时间戳)

我被困在编写查询。任何人都可以指导我。请帮忙。 :(

回答

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开始吧

+0

total_facebook_yes和total_twitter_yes显示不正确。它显示与count(name)相似的值。 – LittleLebowski 2013-03-03 10:52:35

+0

我想你应该使用“sum”而不是count在你使用case语句的地方。 – 2013-03-03 10:57:25

+0

是的,我已经更新了它的总和,一个小故障,直到我在数据库上测试它)注意我已经做了两种不同的方式与案例和其他与简单的比较,只选择一种你喜欢的策略。 – aweis 2013-03-03 10:58:05

0

看看预期的结果,你认为JOIN发生在哪里?试试这个。布尔换行条款ping,

SELECT NAME, EMAIL, COUNT(FACEBOOK='yes') as FBTOTAL_Count, COUNT(Twitter='yes') as TOTALTW_Count 
FROM YOURTABLE 
GROUP BY FACEBOOK, TWITTER, NAME, EMAIL 
+0

我的群组中有一个错字。来自移动设备,无法编辑。删除Facebook,Twitter然后尝试。 – bonCodigo 2013-03-03 10:58:13

+0

好的,让我为你编辑它。 – LittleLebowski 2013-03-03 11:00:59