给定行的所有列的平均值(没有显式写入列名)? SQL

时间:2017-02-17 19:26:49

标签: mysql sql

我的SQL查询是

select 
concat(3*floor(email/3), '-', 3*floor(email/3) + 2) as `range`, 
avg(`db_1`) as `avg_db1`,
avg(`db_2`) as `avg_db2` 
[
...
...
...

]
from allocation 
group by 1

我不想明确定义列的名称,因为它们的数量很大和/或可能是动态的。是否可以只使用SQL? (我用程序语言知道可能性。)

SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'allocation' AND COLUMN_NAME <> "email"
ORDER BY ORDINAL_POSITION

是否可以使用上面的代码嵌套? (因为它生成列名称)。

1 个答案:

答案 0 :(得分:0)

对于订单有效但不适用于群组...您必须明确重复代码

select 
  concat(3*floor(email/3), '-', 3*floor(email/3) + 2) as `range`, 
  avg(`db_1`) as `avg_db1`,
  avg(`db_2`) as `avg_db2` 
  [
  ...
  ...
  ...

  ]
  from allocation 
  group by  concat(3*floor(email/3), '-', 3*floor(email/3) + 2)

但是从最新版本的mysql开始,您可以使用别名

  select 
  concat(3*floor(email/3), '-', 3*floor(email/3) + 2) as `range`, 
  avg(`db_1`) as `avg_db1`,
  avg(`db_2`) as `avg_db2` 
  [
  ...
  ...
  ...

  ]
  from allocation 
  group by  `range`

使用别名不适用于sqlserver ..或oracle ..