MySQL在一个查询中组合了两个不同的计数

时间:2016-06-03 14:12:22

标签: mysql

我有一张桌子,几乎看起来像这样: SELECT `masterId`, COUNT(`id`) AS `total` FROM `users` GROUP BY `masterId` ORDER BY `total` DESC

每个用户只有一个主人。但是大师可以有n个用户。

现在我想知道每个主人有多少用户。我是这样做的:

SELECT `masterId`, COUNT(`id`) AS `last14days` FROM `users` WHERE `date` > DATE_SUB(NOW(), INTERVAL 14 DAY) GROUP BY `masterId` ORDER BY `total` DESC

但是现在我也想知道自过去14天以来主人有多少新用户。我可以用这个查询来做到这一点:

var myval = $("input:radio").val("cat"); // remove []
alert(myval.val()); // alert the value, not the jquery selector

现在的问题是:我可以通过一个查询以某种方式获取此信息,而不是使用2个查询吗?

1 个答案:

答案 0 :(得分:1)

您可以使用条件聚合来执行此操作,仅计算条件为true的行。在标准SQL中,这将使用聚合函数内的case表达式来完成:

SELECT 
  masterId, 
  COUNT(id) AS total,
  SUM(CASE WHEN date > DATE_SUB(NOW(), INTERVAL 14 DAY) THEN 1 ELSE 0 END) AS last14days
FROM users 
GROUP BY masterId 
ORDER BY total DESC

Sample SQL Fiddle