首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据元素值计算分组平均值

问根据元素值计算分组平均值
EN

Stack Overflow用户
提问于 2020-02-16 04:32:29
回答 2查看 43关注 0票数 0

我有一个包含两列的表: Model和Price

代码语言:javascript
复制
Model       Price
Pilot       30
Civic       20
Highlander  10
Corolla     40
Rav4        25

我知道Pilot和Civic是本田汽车,而Highlander,Corolla,Rav4是丰田。我想计算一下,比如本田集团(30+20)/2和丰田(10+40+25)/3的平均价格。

输出表:

代码语言:javascript
复制
Mode    Average_price
Honda   25
Toyota  25

我的问题是不允许我在现有的表中创建新表或新列。

因此,我认为在查询中的某个地方,我需要列出所有条件

代码语言:javascript
复制
IF Model in ('Pilot','Civic') then Manufacturer='Honda' else if Model in ('Highlander','Corolla','Rav4') then Manufacturer='Toyota'
Then average by Manufacturer.

有人能帮我写一个查询吗?

谢谢,

哈里

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-16 04:35:45

您可以使用case表达式:

代码语言:javascript
复制
select 
    case 
        when model in ('Pilot', 'Civic') then 'Honda'
        when model in ('Highlander', 'Corolla', 'Rav4') then 'Toyota'
    end mode,
    avg(price) avg_price
from mytable
group by
    case 
        when model in ('Pilot', 'Civic') then 'Honda'
        when model in ('Highlander', 'Corolla', 'Rav4') then 'Toyota'
    end 

一些数据库通过允许在group by子句中使用别名(例如MySQL)来扩展SQL标准,因此您可以将其简化为:

代码语言:javascript
复制
group by mode
票数 1
EN

Stack Overflow用户

发布于 2020-02-16 04:50:30

一个公用表表达式怎么样?

代码语言:javascript
复制
;WITH hondaCTE AS (
    SELECT 'Honda' AS [make]
    ,   SUM(ct.Price) / COUNT(1) AS [avg_price]
    FROM car_table AS ct
    WHERE ct.Model IN ('pilot','civic')
)
, toyotaCTE AS (
    SELECT 'Toyota' AS [make]
    ,   SUM(ct.Price) / COUNT(1) AS [avg_price]
    FROM car_table AS ct
    WHERE ct.Model NOT IN ('pilot','civic') -- Exclude Honda models
)
-- Union results
SELECT * FROM hondaCTE
UNION
SELECT * FROM toyotaCTE

输出:

代码语言:javascript
复制
make    avg_price
Honda   25
Toyota  25
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60242854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档