을 당신이 GROUP BY에서 롤업 WITH 절을 사용해야합니다 모든 성 당 평균 및 평균을 얻기 위하여. 출력 여기
SELECT IFNULL(gender,'ALL') gender,AVG(age) average_age
FROM people GROUP BY gender WITH ROLLUP;
됩니다 :
mysql> CREATE TABLE people
-> (name VARCHAR(20),age INT,gender CHAR(1));
Query OK, 0 rows affected (0.08 sec)
mysql> INSERT INTO people VALUES
-> ('rolando' ,46,'M'),('pamela' ,40,'F'),
-> ('carlik' ,23,'M'),('javonne' ,22,'M'),
-> ('dominique',15,'F'),('diamond' ,13,'F');
Query OK, 6 rows affected (0.06 sec)
Records: 6 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM people;
+-----------+------+--------+
| name | age | gender |
+-----------+------+--------+
| rolando | 46 | M |
| pamela | 40 | F |
| carlik | 23 | M |
| javonne | 22 | M |
| dominique | 15 | F |
| diamond | 13 | F |
+-----------+------+--------+
6 rows in set (0.00 sec)
mysql> SELECT IFNULL(gender,'ALL') gender,AVG(age) average_age
-> FROM people GROUP BY gender WITH ROLLUP;
+--------+-------------+
| gender | average_age |
+--------+-------------+
| F | 22.6667 |
| M | 30.3333 |
| ALL | 26.5000 |
+--------+-------------+
3 rows in set, 1 warning (0.00 sec)
또 다른 질의 스타일이 것
use junk
DROP TABLE IF EXISTS people;
CREATE TABLE people
(name VARCHAR(20),age INT,gender CHAR(1));
INSERT INTO people VALUES
('rolando' ,46,'M'),
('pamela' ,40,'F'),
('carlik' ,23,'M'),
('javonne' ,22,'M'),
('dominique',15,'F'),
('diamond' ,13,'F');
SELECT * FROM people;
이 필요한 쿼리는 다음과 같습니다
예를 들어
는 여기에 몇 가지 샘플 데이터입니다 있었 :
여기
는 출력 :
mysql> SELECT A.avgage avg_a,F.avgage avg_f,M.avgage avg_m FROM
-> (SELECT AVG(age) avgage FROM people) A,
-> (SELECT AVG(age) avgage FROM people WHERE gender='F') F,
-> (SELECT AVG(age) avgage FROM people WHERE gender='M') M;
+---------+---------+---------+
| avg_a | avg_f | avg_m |
+---------+---------+---------+
| 26.5000 | 22.6667 | 30.3333 |
+---------+---------+---------+
1 row in set (0.00 sec)
그것을 시도 줄!
Ahhh ... 훌륭하다! 감사! – guided1
오, 나의 달콤한 예수! 그리고 그것은 원래 부분 집합에서만 작동합니다! – guided1