我正在使用MySQL
数据库。以下SQL query
计算包含有关ID产品信息的所有行:
select subquery1.ID_PRODUCT,
count(*) as 'COUNT'
from (SELECT id_product as 'ID_PROD'
FROM product_prices) as subquery1
group by subquery1.ID_PROD
order by 'COUNT' DESC
因此,结果左侧的产品ID和引用此产品的总行数如下:
ID_PROD| COUNT
_______________
'1' | '3623'
'2' | '1669'
'3' | '6665'
'4' | '3703'
'5' | '638'
'6' | '4322'
'7' | '545'
'8' | '5481'
'9' | '82'
'10' | '1092'
此表包含不同商店中每种商品的不同价格,因此我需要获取模式(最常见的价值)。因此,如果10美元的产品价格13美元在1092行中重复最多,那么13美元就是模式。我已经使用下一个SQL完成了这个:
(SELECT retail_price FROM product_prices
GROUP BY retail_price
HAVING count(*) >= all (SELECT count(*)
FROM product_prices
GROUP BY retail_price)) as 'MODE'
添加到上一个select
的子查询获取所有产品的模式值,或者我可以使用where
语句获取特定产品的模式,但是这个模式列填充了相同的所有行的值如下:
ID_PROD| COUNT | MODE
_____________________
'1' | '3623' | 55
'2' | '1669' | 55
'3' | '6665' | 55
'4' | '3703' | 55
'5' | '638' | 55
'6' | '4322' | 55
'7' | '545' | 55
'8' | '5481' | 55
'9' | '82' | 55
'10' | '1092' | 55
我想获取每个产品的模式值,而不是全局模式值。这就是我想要的:
ID_PROD| COUNT | MODE
_____________________
'1' | '3623' | 16
'2' | '1669' | 22
'3' | '6665' | 34
'4' | '3703' | 10
'5' | '638' | 24
'6' | '4322' | 48
'7' | '545' | 55
'8' | '5481' | 145
'9' | '82' | 287
'10' | '1092' | 32
有人可以帮帮我吗?提前致谢!!!
编辑:
product_prices
表的数据类似于:
id_product | retail_price
__________________________
'1' | '15'
'1' | '23'
'1' | '18'
'2' | '45'
'2' | '42'
'3' | '44'
'3' | '40'
'3' | '44'
'3' | '39'
'4' | '8'
'5' | '16'
'5' | '16'
'5' | '14'
该表没有很多其他数据,只有几列,但查询不需要它们。因此,我们有许多行具有相同的ID号,第二列中的价格不同。感谢。
答案 0 :(得分:0)
使用mysql计算模式不是一项简单的任务。这是一个首先计算每个组的选项,然后获取每个id的最大计数,然后将这些结果连接回原始查询:
SELECT pp.id_product, pp.retail_price, count(*) cnt
FROM product_prices pp
JOIN
(
SELECT id_product, MAX(cnt) cnt
FROM (
SELECT id_product, retail_price, count(*) cnt
FROM product_prices
GROUP BY id_product, retail_price
) t
GROUP BY id_product
) pp2 ON pp.id_product = pp2.id_product
GROUP BY pp.id_product, pp.retail_price, pp2.cnt
HAVING COUNT(*) = pp2.cnt