[英]How to use group by and count in mysql
在這里我有3張桌子,我必須要數
trip_details
id allocationId tripId
1 7637 aIz2o
2 7626 osseC
3 7536 01LEC
4 7536 78w2w
5 7640 S60zF
6 7548 ruaoR
7 7548 Qse6s
escort_allocation
id allocationId escortId
3 7637 1
4 7626 1
5 7627 1
6 7536 1
7 7640 1
7 7548 1
cab_allocation
allocationId allocationType
7637 Daily Trip
7626 Daily Trip
7627 Daily Trip
7536 Adhoc Trip
7640 Adhoc Trip
7548 Daily Trip
我嘗試使用上表來獲取計數,但是嘗試並沒有實現預期的結果。
我試過SQL查詢
SELECT a.`tripId`
FROM `trip_details` a
INNER JOIN escort_allocation b ON a.`allocationId` = b.`allocationId`
GROUP BY a.`allocationId`
LIMIT 0 , 30
我越來越像這樣
tripId
01LEC
ruaoR
osseC
aIz2o
S60zF
total 6 tripId i got
,所以現在我想算一下,所以我正在使用此查詢
SELECT COUNT(*)
FROM `trip_details` a
INNER JOIN escort_allocation b ON a.`allocationId` = b.`allocationId`
GROUP BY a.`allocationId`
LIMIT 0 , 30
但是此查詢無法正常工作。 我得到如下結果
2
2
1
1
1
我的MYSQL表和值類似
CREATE TABLE `trip_details` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`allocationId` int(11) NOT NULL,
`tripId` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
KEY `tripId` (`tripId`),
KEY `allocationId` (`allocationId`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1 ;
INSERT INTO trip_details
(id, allocationId, tripId)
VALUES
(1, 7637, '00SwM'),
(2, 7626, '00SwM'),
(3, 7536, '00SwM'),
(4, 7536, '01hEU'),
(5, 7640, '01hEU'),
(6, 7548, 'IRZMS'),
(7, 7548, 'IRZMS');
CREATE TABLE `escort_allocation` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`allocationId` int(11) NOT NULL,
`escortId` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1 ;
INSERT INTO escort_allocation
(id, allocationId, escortId)
VALUES
(1, 7637, 'ssda'),
(2, 7626, 'adad'),
(3, 7627, 'sfsaf'),
(4, 7536, 'ssaf'),
(5, 7640, 'asf'),
(6, 7548, 'a3r');
CREATE TABLE `cab_allocation` (
`allocationId` int(11) NOT NULL AUTO_INCREMENT,
`allocationType` enum('Daily Trip','Adhoc Trip') NOT NULL,
PRIMARY KEY (`allocationId`)
) ENGINE=InnoDB AUTO_INCREMENT=7695 DEFAULT CHARSET=latin1;
INSERT INTO cab_allocation
(allocationId, allocationType)
VALUES
(7637, 'Daily Trip'),
(7626, 'Daily Trip'),
(7627, 'Daily Trip'),
(7536, 'Adhoc Trip'),
(7640, 'Adhoc Trip'),
(7548, 'Daily Trip');
這樣,您應該獲得三叉戟和數量:
SELECT COUNT(a.tripId) as total, a.tripId as tripId
FROM trip_details a INNER JOIN escort_allocation b
ON a.allocationId = b.allocationId
GROUP BY a.allocationId LIMIT 0 , 30
你可以試試這個
SELECT COUNT(DISTINCT (a.`tripId`))
FROM `trip_details` a
INNER JOIN escort_allocation b ON a.`allocationId`=b.`allocationId`
LIMIT 0 , 30
由於GROUP BY
緣故,所有分配 GROUP BY
都有單獨的計數。
您可以使用:
SELECT COUNT(DISTINCT a.allocationId)
FROM
trip_details a
INNER JOIN
escort_allocation b
ON a.allocationId = b.allocationId
以前,您使用了COUNT(*)
並且還使用了GROUP BY
因此您獲得的行數來自各個組。
更新2:
SELECT
(
SELECT COUNT(*) FROM trip_details
) AS Total_Trip_Count,
COUNT(T.tripId) as Escort_Count,
(
SELECT COUNT(*) FROM
(
SELECT a.allocationId
FROM escort_allocation a
INNER JOIN cab_allocation c ON a.allocationId = c.allocationId
WHERE c.allocationType = 'Adhoc Trip'
GROUP BY a.allocationId
) AS Ad
) AS Adhoc_Trip_Count
FROM
(
SELECT a.tripId FROM
trip_details a
INNER JOIN
escort_allocation b
ON a.allocationId = b.allocationId
GROUP BY a.allocationId
) AS T
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.