计算与ID相关的行数

时间:2014-09-11 13:05:00

标签: mysql

我很难计算与id相关的行数。查询返回正确的数据。

SELECT T.`payment`, T.`time_left`, T.`time_arrived`, T.`group_separator`, MD.`group_name`
FROM Transaction T
LEFT JOIN  Group G
ON T.`group_id` = G.`group_id`
LEFT JOIN division DI
ON G.`associated_group_id` = DI.`group_id`
LEFT JOIN meeting_data MD
ON G.`group_name` = MD.`group_name`
GROUP BY T.`time_left`;

数据集示例;

**payment**
paid
paid
not_paid
paid

**time_left**
2014-09-09 12:23:42
2014-09-09 12:24:14
2014-09-09 12:24:49
2014-09-10 19:04:12

**time_arrived**
2014-09-09 10:20:21
2014-09-09 10:21:16
2014-09-09 10:21:45
2014-09-09 15:35:06

**group_separator**   
25
25
25
26

**group_name**
Team Grey
Team Grey
Team Grey
Summer Blues

我现在正在尝试计算每个group_separator的一部分行数。

因此25将返回计数3. 26将返回1的计数。

我做一个count(*)或count(distinct(group_separator))并获得一个奇怪的行数(我说的数百个)。表格中有大约77000行。

2 个答案:

答案 0 :(得分:0)

您按T。time_left进行分组,因此计数会为您计算每个T中的行数。time_left。如果您想通过group_separator进行计数,则需要将其分组。

或者我误解了你的问题?

答案 1 :(得分:0)

首先,你真的需要left outer join吗?您正在加入应具有外键关系的字段,而left outer join只是说“我的数据不适合我的数据模型”。

其次,您将在行中返回许多其他信息,这些信息在组分隔符级别会更详细。

也许这个问题是你真正想要的:

SELECT T.`group_separator`, count(*) as NumGroups
FROM Transaction T JOIN 
     Group G
     ON T.`group_id` = G.`group_id` JOIN
     division DI
     ON G.`associated_group_id` = DI.`group_id` JOIN
     meeting_data MD
     ON G.`group_name` = MD.`group_name`
GROUP BY T.`group_separator`;

实际上,我看这个,如果其他join实际上改变了结果,我会感到惊讶。你可能只想:

SELECT T.`group_separator`, count(*) as NumGroups
FROM Transaction T
GROUP BY T.`group_separator`;