可以在查询中保留分数吗?

Posted

技术标签:

【中文标题】可以在查询中保留分数吗?【英文标题】:Possible to keep fraction in a query? 【发布时间】:2019-05-24 21:10:26 【问题描述】:

我正在寻找一种将 SQL 中的平均值相加的方法。这是我拥有的数据示例:

product      avg_price
phone        104.28
car          1000.00

我正在寻找这样的东西:

product      avg_price
[all]        544.27
phone        104.28
car          1000.00

我目前的做法是将计数和总和存储在两个不同的列中,例如:

product    cnt     total
phone      203     20,304.32
car        404     304,323.30

然后从中得到平均值。但是,我想知道是否有可能在 SQL 中只“保留分数”并能够根据需要添加它们。例如:

product      avg_price
[all]        [add the fractions]
phone        20,304.32 / 203
car          304,323.30 / 404

或者我是否需要使用两列才能获得多个聚合行的平均值?

【问题讨论】:

显然你需要每行的计数和总计!您将它存储在两列还是一列中(例如作为结构)完全取决于您。作为选项,您可以为每行设置 avg 和 count 或 total - 这样您就可以重新计算缺失的属性 这是一个数学问题而不是编程问题:是的,你需要两列。 【参考方案1】:

您不需要 2 列来获取平均值,但如果您想显示为分数,那么您将需要两个数字。不过,它们不需要在 2 列中。

    select product, sum(total) ||'/'||sum(count) 
    from table a
        join table b on a.product=b.product
    union
    select product, total ||'/'||count 
    from table a
        join table b on a.product=b.product;

【讨论】:

以上是关于可以在查询中保留分数吗?的主要内容,如果未能解决你的问题,请参考以下文章

thinkphp测评系统分数怎么统计?

查询英语分数在 80-90之间的同学?

solr 可以返回函数值(不是 solr 分数或文档字段)吗?

如何进行重定向并保留查询字符串?

如何保留我的距离表示分数字段并将其映射到我的结果实体中?

如何保留超过 5 天的查询日志?