AVG功能有效但不是COUNT但无法找出原因

时间:2017-09-21 19:43:57

标签: mysql

由于某些原因,如果COUNT是AVG或MIN,此查询有效,但是当我使用COUNT时,我每周都得到相同的结果。我有一张产品SKU表,类别和每周表现。尝试过几次这样做,但我尝试过的每一种方式,每周都会得到相同的结果。

SELECT 
  category_table.category, 
    COUNT(rank_table.WK_1), 
    COUNT(rank_table.WK_2), 
    COUNT(rank_table.WK_3)
FROM category_table
JOIN rank_table ON
  category_table.sku = rank_table.sku
WHERE 
    rank_table.WK_1 < 999999 
    AND rank_table.WK_2 < 999999 
    AND rank_table.WK_3 < 999999
GROUP BY category;

结果如下所示:

 1. category-----|---WK_1---|---WK_2---|---WK_3---|
 2. hats---------|------100-|------100-|------100-|
 3. shirts-------|------150-|------150-|------150-|
 4. pants--------|-------50-|-------50-|-------50-|

1 个答案:

答案 0 :(得分:1)

在你的方式中,你只是计算行中的非空值的数量,而在内连接中,这个数字可能是相同的。如果您拥有的所有值都不是空值,则可以使用count(distinct ...)来计算不同值的数量

  SELECT 
    category_table.category, 
      COUNT(distinct rank_table.WK_1), 
      COUNT(distinct rank_table.WK_2), 
      COUNT(distinct rank_table.WK_3)
  FROM category_table
  JOIN rank_table ON
    category_table.sku = rank_table.sku
  WHERE 
      rank_table.WK_1 < 999999 
      AND rank_table.WK_2 < 999999 
      AND rank_table.WK_3 < 999999
  GROUP BY category;