我有一张桌子,几乎看起来像这样:
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个查询吗?
答案 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