我有类似的表格:
function filterByClassId(schools, id){
return schools.filter(function(school){
return school.classes.some(function(c){
return c.classId === id;
});
});
}
具有相似的值(名称字段中的随机字符)
CREATE TABLE ForgeRock
(`id` int, `name` varchar(100), `price` decimal(10,2),`soldtime` datetime)
;
现在,我正试图通过以下方式获得每个销售产品的数量:
INSERT INTO ForgeRock
(`id`, `name`, `price`,`soldtime`)
VALUES
(1, 'OpenIDM..', 10,'2015-10-11'),
(2, 'OpenAM....', 20,'2016-1-9'),
(3, 'OpenDJ...', 30,'2010-1-1'),
(2, 'OpenAM...', 20,'2016-12-9'),
(2, 'OpenAM.....', 20,'2016-11-9'),
(2, 'OpenDJ...', 20,'2016-10-9')
;
但是我得到随机结果(大多数产品都缺失了)。 我认为这是由于对组的限制,所有非聚合列必须是group by的一部分。什么是替代解决方案?
感谢。
答案 0 :(得分:1)
既然你只想要产品和数量,你应该只询问产品和数量而不是" *"
SELECT name, count(*) AS sc FROM ForgeRock GROUP BY name
如果你想要更多" group"数据,例如平均价格,将其添加到所选项目列表中:
SELECT name, count(*) AS sc, avg(price) AS ap
FROM ForgeRock
GROUP BY name
如果您需要其他非组数据,还需要将其添加到GROUP BY子句
SELECT name, DATE(soldtime), count(*) AS sc, avg(price) AS ap
FROM ForgeRock
GROUP BY name, DATE(soldtime)
这将按天计算您的计数和平均价格。