如果你真的想最終的結果如你所說,你可以使用的意見。實現結果需要很長的路要走。但是,這是方法。我創建了下面的表member
並插入數據如下。
CREATE TABLE member (
id int(11) AUTO_INCREMENT PRIMARY KEY,
dob date DEFAULT NULL,
expiry date DEFAULT NULL
);
INSERT INTO member (id, dob, expiry) VALUES
(1, '1980-01-01', '2020-05-05'),
(2, '1982-05-05', '2020-01-01'),
(3, '1983-05-05', '2020-01-01'),
(4, '1981-05-05', '2020-01-01'),
(5, '1994-05-05', '2020-01-01'),
(6, '1992-05-05', '2020-01-01'),
(7, '1960-05-05', '2020-01-01'),
(8, '1958-05-05', '2020-01-01'),
(9, '1958-07-07', '2020-05-05');
以下是member
表中的數據。
id | dob | expiry
--------------------------------
1 | 1980-01-01 | 2020-05-05
2 | 1982-05-05 | 2020-01-01
3 | 1983-05-05 | 2020-01-01
4 | 1981-05-05 | 2020-01-01
5 | 1994-05-05 | 2020-01-01
6 | 1992-05-05 | 2020-01-01
7 | 1960-05-05 | 2020-01-01
8 | 1958-05-05 | 2020-01-01
9 | 1958-07-07 | 2020-05-05
然後,我爲所有名爲current_members
的當前員工創建了一個單獨的視圖,如下所示。
CREATE VIEW current_members AS (SELECT * FROM member WHERE TIMESTAMPDIFF(YEAR, CAST(CURRENT_TIMESTAMP AS DATE), member.expiry) >= 0);
然後從該視圖查詢,我創建包含的young
,middle
和old
如下各年齡段的計數3個單獨的視圖。
CREATE VIEW young AS (SELECT COUNT(*) as Young FROM (SELECT TIMESTAMPDIFF(YEAR, current_members.dob, CAST(CURRENT_TIMESTAMP AS DATE)) AS age FROM current_members HAVING age <= 25) yng);
CREATE VIEW middle AS (SELECT COUNT(*) as Middle FROM (SELECT TIMESTAMPDIFF(YEAR, current_members.dob, CAST(CURRENT_TIMESTAMP AS DATE)) AS age FROM current_members HAVING age BETWEEN 25 AND 50) mid);
CREATE VIEW old AS (SELECT COUNT(*) as Old FROM (SELECT TIMESTAMPDIFF(YEAR, current_members.dob, CAST(CURRENT_TIMESTAMP AS DATE)) AS age FROM current_members HAVING age >= 50) old);
最後,這三個觀點是交叉,以獲得各年齡段的計數爲一個決賽桌單行如下加盟。
SELECT * FROM young, middle, old;
這會給你以下結果。
Young | Middle | Old
----------------------
2 | 4 | 3
建議:對於上述繁瑣的時差演算過程,你可以寫自己的存儲過程來簡化代碼
見https://meta.stackoverflow.com/questions/333952/why-應該我提供了一個mcve爲什麼似乎對我來說是一個非常簡單的sql查詢 – Strawberry
可能重複[如果條件在MySQL查詢計數](http:///stackoverflow.com/questions/9798937/count-with-if-condition-in-mysql-query) – Shadow
您可能不需要羣組,但條件計數在答案中有所描述。 – Shadow