试图通过添加连接在一个表中获得2个总和

时间:2014-01-25 22:22:40

标签: mysql sql count

我有一个submissions表,其中包含type tiprequest的提交。

我正在尝试获取特定用户的所有提交内容(在其信息中心上显示为所有活动的汇总)。

E.g。 You have submitted: 5 requests and 1 tip

我的提交创建表如下所示:

       Table: submissions
Create Table: CREATE TABLE `submissions` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `slug` varchar(255) NOT NULL,
  `description` mediumtext NOT NULL,
  `user_id` int(11) NOT NULL,
  `created` datetime NOT NULL,
  `type` enum('tip','request') NOT NULL,
  `thumbnail` varchar(64) CHARACTER SET latin1 DEFAULT NULL,
  `removed` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `keywords` varchar(255) NOT NULL,
  `ip` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `user_id` (`user_id`),
  FULLTEXT KEY `search` (`title`,`description`,`keywords`)
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

我提出了一个有效的查询并向我提供了用户提交的数量,但因为每次提交(返回的行)都会将类型保存为tiprequest。所以我现在想弄清楚如何汇总这些信息。

我的查询返回所有tip的用户。我也试图为request做一个。

SELECT users.*, count(submissions.id) 
AS "tipsCount" 
FROM users 
LEFT JOIN submissions on users.id = submissions.user_id 
WHERE username = 'blahbster' 
AND submissions.type = 'tip' 
ORDER BY submissions.created DESC 
LIMIT 1;

也许我可以在这里使用一笔钱?我的尝试:

SELECT users.*, 
SUM(case when type = 'tip' then 1 else 0 end) as "tipsCount"
SUM(case when type = 'request' then 1 else 0 end) as "requestsCount"
FROM users 
LEFT JOIN submissions on users.id = submissions.user_id 
WHERE username = 'blahbster' 
ORDER BY submissions.created DESC 
LIMIT 1;

1 个答案:

答案 0 :(得分:2)

SELECT a.username, b.type,
SUM(case when b.type = 'tip' then 1 else 0 end) as "tipsCount",
SUM(case when b.type = 'request' then 1 else 0 end) as "requestsCount"
FROM users as a
LEFT JOIN submissions as b
ON a.id = b.user_id 
GROUP BY a.username, b.type; 

您的第二个查询已关闭...但它没有汇总特定用户的总计提示和总请求数。总和不计算任何东西,即没有GROUP BY。上面的查询应该有所帮助。显然,如果需要,可以重新添加WHERE过滤器。