Mysql 在查询中与其他列一起显示平均值
我想显示一个成员列表,它比所有其他成员的平均值都高。我的桌子看起来像这样:Mysql 在查询中与其他列一起显示平均值,mysql,sql,database,Mysql,Sql,Database,我想显示一个成员列表,它比所有其他成员的平均值都高。我的桌子看起来像这样: CREATE TABLE Members ( MemberID nvarchar(50) NOT NULL PRIMARY KEY, MemberName nvarchar(50) NOT NULL, MemberAddress nvarchar(50), MemberContact int, MemberAge int, RegistrationDate nvarch
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');
以下是我到目前为止尝试过但没有成功的方法:
SELECT MemberID, MemberName, MemberAge,FROM Members
(SELECT AVG(Members.MemberAge) AS AverageAge)
WHERE MemberAge>=AverageAge
…虽然这将导致新的AverageAge
列中出现重复数据-但批处理查询(返回多个结果集的查询)将更干净:
MySQL具有隐式变量声明(与T-SQL不同,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
-- 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