我在解決如何編寫能夠爲使用HAVING和LIMIT子句的查詢創建摘要行的MySQL查詢有問題。下面是一些示例數據和這樣的重現我的問題..MySQL查詢使用HAVING和LIMIT子句創建查詢的摘要行
樣品表
CREATE TABLE `user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`logins` int(10) unsigned DEFAULT NULL,
`date` date DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
樣本數據
INSERT INTO `user` (`id`, `logins`, `date`)
VALUES
(1,1,'2016-09-25'),
(2,1,'2016-09-25'),
(3,2,'2016-09-26'),
(4,2,'2016-09-26'),
(5,3,'2016-09-27'),
(6,3,'2016-09-27'),
(7,4,'2016-09-28'),
(8,4,'2016-09-28'),
(9,5,'2016-09-29'),
(10,5,'2016-09-29');
這裏是顯示全結果我基本查詢。
mysql> select `date`, sum(`logins`) `logins` from `user` group by `date`;
+------------+--------+
| date | logins |
+------------+--------+
| 2016-09-25 | 2 |
| 2016-09-26 | 4 |
| 2016-09-27 | 6 |
| 2016-09-28 | 8 |
| 2016-09-29 | 10 |
+------------+--------+
沒問題得到摘要行關閉的,雖然權利..
mysql> select sum(`logins`) `logins` from `user`;
+--------+
| logins |
+--------+
| 30 |
+--------+
但是,如果我想建立一個彙總行出來的東西像下面的查詢什麼?在這個例子中,我添加了HAVING和LIMIT子句來模擬非常大的數據集。此查詢中的HAVING子句表示用戶可以將其作爲接口中提供的過濾器中的最大金額進行更改。限制0,2表示結果的第1頁(在這種情況下爲3; 0,2; 2,4; 4,6)。這些查詢是分頁系統的一部分,用於一次顯示X,X數量的結果。因此,對於在查詢中的限制條款的原因..
mysql> select `date`, sum(`logins`) `logins` from `user` group by `date` having `logins` <= 8 limit 0, 2;
+------------+--------+
| date | logins |
+------------+--------+
| 2016-09-25 | 2 |
| 2016-09-26 | 4 |
+------------+--------+
說我需要爲上述結果集應該總結出6名登錄在這種情況下,彙總查詢。我將如何去建立一個查詢來做這樣的事情?
現在我不能簡單地循環查詢結果(客戶端或服務器端)合計總計,因爲html表(服務器端生成)只顯示結果的第一頁,並且只會計數顯示在該特定頁面上的計數。我需要以顯示與完整的數據集跨表分頁的所有頁面,如果讓任何意義的計數摘要行..
UPDATE
這是一種理想的結果的樣本..
+------------+--------+
| date | logins |
+------------+--------+
| 2016-09-25 | 2 |
| 2016-09-26 | 4 |
+------------+--------+
| TOTAL | 20 | <-- JUST NEED A QUERY TO PRODUCE THIS NUMBER SOME HOW..
+------------+--------+
對不起你們。我的意思是說20應該是多少,而不是6 ..監守完整結果和HAVING過濾器設置會這樣:
mysql> select `date`, sum(`logins`) `logins` from `user` group by `date` having `logins` <= 8;
+------------+--------+
| date | logins |
+------------+--------+
| 2016-09-25 | 2 |
| 2016-09-26 | 4 |
| 2016-09-27 | 6 |
| 2016-09-28 | 8 |
+------------+--------+
SORRY!
這幾乎就像我需要像這樣的查詢(沒有GROUP BY):
select `date`, sum(`logins`) `logins` from `user` having `logins` <= 8
但顯然這並不工作..
最後更新
那麼這裏是我20基於客@低於陰影的回答是一個很簡單的例子,但最終導致我我所需要的答案:
mysql> select sum(`logins`) `logins` from (select `date`, sum(`logins`) `logins` from `user` group by `date` having `logins` <= 8) t;
+--------+
| logins |
+--------+
| 20 |
+--------+
看起來很像你想要的東西!你能顯示所需的輸出 – e4c5
我需要一個查詢來顯示6登錄爲最後一次查詢的摘要行。 – Rick