AVI(第1列),而DISTINCT(第2列)

时间:2017-12-27 07:26:02

标签: mysql

我想计算一列的平均值,同时使用其他列作为不同的,我不能使用group by因为它会影响其他一些数据是否有任何方法可以通过来执行此操作

id      name      price
----------------------
1       name1     200
2       name2     200
3       name3     100
3       name3     100

我想要列价格的平均值但是有重复的行,所以我不能只写AVG(价格)而且我也不能在价格上使用不同,而是我想在不使用groupby的情况下使用不同的id

AVG( DISTINCT price)

2 个答案:

答案 0 :(得分:0)

要从整个表格和不同的ID中获取平均价格,首先您需要根据相同的ID排除重复数据,以下查询将选择每个ID具有最高价格的单行,例如考虑到您的ID 3的样本数据,有3个价格100和200.如果您想选择最低价格然后将a.price < b.price更改为a.price > b.price

,则ID 3将需要200
select distinct a.*
from table1 a
left join table1 b on a.id = b.id
and a.price < b.price
where b.id is null;

如果您拥有不同的数据,则可以应用avg()

select avg(price)
from (select distinct a.*
      from table1 a
      left join table1 b on a.id = b.id
      and a.price < b.price
      where b.id is null
) t;

select  avg(a.price)
from table1 a
left join table1 b on a.id = b.id
and a.price < b.price
where b.id is null;

DEMO rextester中存在一些格式问题,因此这里是fiddle link

答案 1 :(得分:-1)

试试这个:

SELECT AVG(DISTINCT price) FROM tableName;