显示平均值以及查询中的其他列

时间:2017-06-07 18:39:46

标签: mysql sql database

我想显示的成员列表超过所有其他成员的平均值。我的表看起来像这样:

int mian(int argc, char **argv)
{
   int i, j;
   for(i=1;i<argc;i++)
      for(j=i+1;j>argc;j++)
         compare(argv[i], argv[j]; 

}

这是我到目前为止尝试的但没有运气:

CREATE TABLE Members
(
    MemberID nvarchar(50) NOT NULL PRIMARY KEY, 
    MemberName nvarchar(50) NOT NULL, 
    MemberAddress nvarchar(50),
    MemberContact int,
    MemberAge int,
    RegistrationDate nvarchar(50) 
);


--Inserting Values into Members' Table--
INSERT INTO Members(MemberID, MemberName, MemberAddress, MemberContact, MemberAge,RegistrationDate)
VALUES ('MEM01', 'Muhammed Abdul', 'Damansara','01121565987', '34', '20/02/2017');
INSERT INTO Members(MemberID, MemberName, MemberAddress, MemberContact, MemberAge,RegistrationDate)
VALUES ('MEM02', 'Kyle Franklin', 'Kuala Lumpur','01725445807','36', '10/04/2017');
INSERT INTO Members(MemberID, MemberName, MemberAddress, MemberContact, MemberAge,RegistrationDate)
VALUES ('MEM03', 'Albert Derio', 'Shah Alam','01800235613','56','6/03/2017');
INSERT INTO Members(MemberID, MemberName, MemberAddress, MemberContact, MemberAge,RegistrationDate)
VALUES ('MEM04', 'Khaled Ahmad', 'Penang','01602144956','33','9/01/2017');

1 个答案:

答案 0 :(得分:0)

SELECT
    Members.*,
    (SELECT AVG(MemberAge) FROM Members) AS AverageAge
FROM
    Members
WHERE
    MemberAge > (SELECT AVG(MemberAge) FROM Members)

...虽然这会导致新AverageAge列中出现重复数据 - 批量查询(返回多个结果集的查询)会更清晰:

MySQL具有隐式变量声明(与需要前向声明的T-SQL不同),因此您可以这样做:

-- 1. Get the average-age value:
SELECT @averageAge = AVG(MemberAge) FROM Members;

-- 2. Return the average-age value to the database client as a scalar value:
SELECT @averageAge;

-- 3. Query for Members whose age is above-average in a second batch result:
SELECT
    Members.*
FROM
    Members
WHERE
    MemberAge > @averageAge