有没有办法将这两个SQL查询压缩成一个查询?

时间:2014-03-14 13:24:09

标签: sql

我正在尝试获得每个用户的平均产品数量。为此,我有两个问题:

获得产品数量的产品:

SELECT COUNT(*) FROM `products`

另一个获得产品用户数量的人:

SELECT COUNT(DISTINCT `users`.`id`) FROM `users` INNER JOIN `products` ON `users`.`id` = `products`.`creator_id`

然后我将产品数除以用户数以获得平均值。我更愿意在一个查询中执行此操作,包括分割。

3 个答案:

答案 0 :(得分:1)

您可以定期COUNT获取信息;

SELECT COUNT(*) product_count, 
       COUNT(DISTINCT products.creator_id) user_with_product_count
FROM products

产品数量是一个简单的行数,为了让用户获得产品,您只需计算不同的创建者。

如果您只想计算平均值,只需立即计算分数;

SELECT COUNT(*) / COUNT(DISTINCT products.creator_id) average
FROM products

A simple SQLfiddle for testing

答案 1 :(得分:0)

你可以添加计数,可能有更好的方法,但工作

SELECT 
(SELECT COUNT(*) FROM `products`) as OVERALL_COUNT,
COUNT(DISTINCT `users`.`id`) FROM `users` 
INNER JOIN `products` 
ON `users`.`id` = `products`.`creator_id`

答案 2 :(得分:0)

你有找这个吗?

SELECT AVG( `products`.`id`)
FROM `users`
  INNER JOIN `products`
    ON `users`.`id` = `products`.`creator_id`
GROUP BY `users`.`id`