【问题标题】:MySQL COUNT where and COUNT allMySQL COUNT where 和 COUNT all
【发布时间】:2013-04-04 11:06:07
【问题描述】:

我有一个有四列的表(销售);

id, user_id, product_id, and date_added.

我需要统计某个用户已经售出的具有某个id的产品的数量,还要得到该用户当月售出的产品总数。

我无法计算总产品。我有;

SELECT user_id, product_id, count(user_id) 
FROM sales 
WHERE MONTH(date_added) = MONTH(CURRENT_DATE) 
GROUP BY user_id, product_id; 

如何对用户的总销售额求和,以便获得特定 product_id 占总销售额的百分比?

我希望我的输出看起来像这样;

|----------|----------|----------|----------|
|user_id   |product_id|sales     |total     |
|----------|----------|----------|----------|
|1         |4         |6         |82        |
|2         |4         |3         |121       |
|3         |4         |8         |93        |      
|----------|----------|----------|----------|

其中 total 是用户的总销售额。

(应该提一下,我不需要mysql来计算百分比——只是为了得到所有产品销售额的总和)

谢谢

【问题讨论】:

  • 你能提供一个预期输出的样本吗,因为我觉得你想要的输出数据不适合一个输出表,GROUP BY 用于user_id, product_id
  • 嗨@harsh,感谢您的提问,我已经用所需的输出表更新了我的问题。
  • 如果单个user_id 有多个product_id,那么您希望total 重复吗?我不认为这是一个好主意!
  • @harsh,我试图绘制一个柱形图(来自谷歌图表工具),它显示每个用户(销售人员)所有类型产品的销售额,所以我需要他们所有的销售额,这样我就可以在每列中显示数字占销售人员总销售额的百分比。这可能不是这样做的方法,但它对我有用:)

标签: mysql


【解决方案1】:

您必须使用子查询,因为您依赖聚合函数来进行计数

SELECT user_id, @pid:= product_id as product_id, count(user_id),
         (SELECT count(*)
          FROM sales
          WHERE MONTH(date_added) = MONTH( now() )
               AND product_id = @pid
          group by user_id
         ) as total_product_sales
FROM sales 
WHERE MONTH(date_added) = MONTH( now() ) 
GROUP BY user_id, product_id; 

【讨论】:

  • 我会更正这个答案,因为据我了解,我们必须计算产品数量,而不是用户数量:
  • SELECT user_id, product_id, count(product_id) as prod_count, ( SELECT count(product_id) FROM sales WHERE MONTH(date_added) = MONTH(now()) and user_id = t1.user_id GROUP BY user_id ) as total_prods FROM sales t1 WHERE MONTH(date_added) = MONTH(now()) GROUP BY user_id, product_id
【解决方案2】:

其实我不太明白你想要什么...

此查询将为您提供给定用户的“小计”

 SELECT product_id, count(user_id) 
 FROM sales 
 WHERE MONTH(date_added) = MONTH(CURRENT_DATE) 
   AND user_id='YOUR_USER_ID'
 GROUP BY product_id with rollup; 

OR 如果您想要给定产品 ID 和用户 ID 当月的总体百分比:

 SELECT 
        PARTIAL_SALES/TOTAL_SALES*100 
 FROM
      (SELECT USER_ID,
              count(user_id) AS PARTIAL_SALES
         FROM sales 
              WHERE MONTH(date_added) = MONTH(CURRENT_DATE) 
              AND user_id='YOUR_USER_ID'
              AND PRODUCT_ID='YOUR_PRODUCT_ID'
          GROUP BY USER_ID) AS PARTIAL,
      (SELECT USER_ID, 
              count(user_id) as TOTAL_SALES
         FROM sales 
              WHERE MONTH(date_added) = MONTH(CURRENT_DATE) 
          GROUP BY USER_id) AS TOTAL1
 WHERE PARTIAL.USER_ID=TOTAL.USER_ID;

【讨论】:

  • 嗨大卫,感谢您的回答。我不需要在 sql 调用中计算百分比,之后我可以使用原始数据来计算。
  • 然后只使用第一个查询,即汇总查询。它应该给你每个产品 id 的小计,最后一行将是总和
  • 我想用结果构建一个柱形图,显示每个销售人员的每种产品的销售额。我无法手动添加 user_id 或 product_id,它们必须是查询的一部分
  • SELECT user_id, product_id, count(user_id) FROM sales WHERE MONTH(date_added) = MONTH(CURRENT_DATE) GROUP BY user_id, product_id with rollup;应该做的工作..你会得到像 user1 prod1 10 user1 prod2 20 user1 NULL 30
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多