0

我有一个问题,当在 product_view 表上获取查询结果时,我还想获取与查询结果相关的每个月的产品月总数(来自 product_month 列)。

例如

如果我做了这样的查询:

SELECT * FROM product_view
WHERE product_price BETWEEN 945 AND 980;

product_view 表的数据如下:

INSERT INTO product_view
    (`product_id`, `product_month`, `product_price`)
VALUES
    (4, 'DEC', 999),
    (4, 'FEB', 905),
    (4, 'JAN', 905),
    (8, 'DEC', 1049),
    (8, 'FEB', 955),
    (8, 'JAN', 955),
    (8, 'DEC', 1049),
    (8, 'FEB', 955),
    (8, 'JAN', 955),
    (22, 'APR', 925),
    (22, 'AUG', 969),
    (22, 'JUL', 969),
    (22, 'JUN', 945),
    (22, 'MAR', 925),
    (22, 'MAY', 925),
    (22, 'OCT', 915),
    (22, 'SEP', 945),
    (27, 'APR', 1435),
    (27, 'JUN', 1459),
    (27, 'MAY', 1435),
    (27, 'OCT', 1459),
    (27, 'SEP', 1459),
    (31, 'APR', 3029),
    (31, 'AUG', 3029),
    (31, 'FEB', 3029);

我不仅希望语句给我查询结果,还希望返回结果中每个月的总计数()。即使用上面的查询-FEB = 2,JUN = 1 等...

最终结果 - 重复 count() 结果

PRODUCT_ID  PRODUCT_MONTH   PRODUCT_PRICE   Month_count
8               FEB          955            2
8               JAN          955            2
8               FEB          955            2
8               JAN          955            2
22              AUG          969            1
22              JUL          969            1
22              JUN          945            1
22              SEP          945            1


请有人建议我从结果中获取 count() 的最佳方法,还有一种更好的方法来显示这些多个计数,而不会在查询结果集中的每一行上重复它的结果。即变量或临时表(尽管使用临时表有许多用户同时执行此查询,因此每个用户获得准确结果会存在问题,因为上述查询的 product_price BETWEEN 值可以由用户更改)

谢谢

4

4 回答 4

0

我认为你应该使用 group by。看看下面的查询。

SELECT product_month,count(product_month) as month,sum(product_price)
FROM product_view
WHERE product_price BETWEEN 945 AND 980
group by(product_month);
于 2013-10-28T12:14:35.267 回答
0

您可以使用 GROUP BY product_month:

SELECT product_month, COUNT(*)
FROM product_view
WHERE product_price BETWEEN 945 AND 980
GROUP BY product_month;

sqlfiddle demo

这会给你:

PRODUCT_MONTH   COUNT(*)
AUG                 1
FEB                 2
JAN                 2
JUL                 1
JUN                 1
SEP                 1
于 2013-10-28T12:15:25.123 回答
0

我认为您应该使用以下查询:

SELECT PRODUCT_ID, PRODUCT_MONTH, PRODUCT_PRICE, COUNT(*)
FROM product_view
WHERE product_price BETWEEN 945 AND 980
GROUP BY PRODUCT_ID, PRODUCT_MONTH, PRODUCT_PRICE;
于 2013-10-28T13:14:25.727 回答
0

如果你想要一个产品每月的总销售额

select product_id, product_month from product_view 
group by product_id, product_month;

结果

product_id  | product_month
4           | JAN
4           | FEB
14          | JAN
于 2013-10-28T12:19:20.220 回答