MySQL: 如何在不使用limit的情况下只显示最小计数?
MySQL: How to display only the minimum count without the use of limit?
这里的逻辑错误是输出显示如下:
+-----------------+-------+----------+-------+
| registration_no | color | producer | count |
+-----------------+-------+----------+-------+
| X23-234 | green | VW | 2 |
| BC-343 | red | BMW | 2 |
| TW-435 | blue | Ford | 1 |
| 232-444 | pink | Army | 2 |
+-----------------+-------+----------+-------+
如您所见,最小计数是蓝色,我希望它只显示这个:
| TW-435 | blue | Ford |
导出的查询不应限制关键字嵌套查询。
这是我的 sql 查询:
mysql> SELECT registration_no, color, producer, COUNT(*) as count
FROM car, car_type, booking
WHERE car.car_type_id = car_type.car_type_id and booking.car_id = car.car_id
GROUP BY car.car_id;
我就是想不出解决办法。
按计数(*)排序,然后限制在第一行
SELECT registration_no, color, producer, COUNT(*) as count
FROM car, car_type, booking
WHERE car.car_type_id = car_type.car_type_id and booking.car_id =car.car_id
GROUP BY car.car_id
ORDER BY COUNT(*) ASC
LIMIT 1;
如果您只需要一行,此方法有效。如果你有更多行 count(*) = 1
那么你应该使用另一种方法
如果您想显示最高计数,只需降序排序
....
ORDER BY COUNT(*) DESC
但在这种情况下,您将获得具有 count = 2
的 3 行之一,而不是所有三行
按计数排序,只取第一个元素 limit
SELECT registration_no, color, producer, COUNT(*) as count
FROM car
join car_type on car.car_type_id = car_type.car_type_id
JOIN booking on booking.car_id = car.car_id
GROUP BY car.car_id
order by count asc
limit 1
顺便说一下,使用显式连接语法。
我认为您需要这样的查询:
SELECT registration_no, color, producer
FROM (
SELECT registration_no, color, producer, COUNT(*) as count
FROM car, car_type, booking
WHERE car.car_type_id = car_type.car_type_id and booking.car_id = car.car_id
GROUP BY car.car_id) DT
ORDER BY count
LIMIT 1;
您可以使用此查询 select 最小计数:
select min(count) from (select COUNT(*) as count
FROM car, car_type, booking
WHERE car.car_type_id = car_type.car_type_id and booking.car_id = car.car_id
GROUP BY car.car_id);
mysql> SELECT registration_no, color, producer
FROM car, car_type, booking
WHERE car.car_type_id = car_type.car_type_id and booking.car_id =car.car_id
GROUP BY car.car_id
ORDER BY COUNT(*) ASC
LIMIT 1;
+-----------------+-------+----------+
| registration_no | color | producer |
+-----------------+-------+----------+
| TW-435 | blue | Ford |
+-----------------+-------+----------+
1 row in set
这里的逻辑错误是输出显示如下:
+-----------------+-------+----------+-------+
| registration_no | color | producer | count |
+-----------------+-------+----------+-------+
| X23-234 | green | VW | 2 |
| BC-343 | red | BMW | 2 |
| TW-435 | blue | Ford | 1 |
| 232-444 | pink | Army | 2 |
+-----------------+-------+----------+-------+
如您所见,最小计数是蓝色,我希望它只显示这个:
| TW-435 | blue | Ford |
导出的查询不应限制关键字嵌套查询。 这是我的 sql 查询:
mysql> SELECT registration_no, color, producer, COUNT(*) as count
FROM car, car_type, booking
WHERE car.car_type_id = car_type.car_type_id and booking.car_id = car.car_id
GROUP BY car.car_id;
我就是想不出解决办法。
按计数(*)排序,然后限制在第一行
SELECT registration_no, color, producer, COUNT(*) as count
FROM car, car_type, booking
WHERE car.car_type_id = car_type.car_type_id and booking.car_id =car.car_id
GROUP BY car.car_id
ORDER BY COUNT(*) ASC
LIMIT 1;
如果您只需要一行,此方法有效。如果你有更多行 count(*) = 1
那么你应该使用另一种方法
如果您想显示最高计数,只需降序排序
....
ORDER BY COUNT(*) DESC
但在这种情况下,您将获得具有 count = 2
的 3 行之一,而不是所有三行
按计数排序,只取第一个元素 limit
SELECT registration_no, color, producer, COUNT(*) as count
FROM car
join car_type on car.car_type_id = car_type.car_type_id
JOIN booking on booking.car_id = car.car_id
GROUP BY car.car_id
order by count asc
limit 1
顺便说一下,使用显式连接语法。
我认为您需要这样的查询:
SELECT registration_no, color, producer
FROM (
SELECT registration_no, color, producer, COUNT(*) as count
FROM car, car_type, booking
WHERE car.car_type_id = car_type.car_type_id and booking.car_id = car.car_id
GROUP BY car.car_id) DT
ORDER BY count
LIMIT 1;
您可以使用此查询 select 最小计数:
select min(count) from (select COUNT(*) as count
FROM car, car_type, booking
WHERE car.car_type_id = car_type.car_type_id and booking.car_id = car.car_id
GROUP BY car.car_id);
mysql> SELECT registration_no, color, producer
FROM car, car_type, booking
WHERE car.car_type_id = car_type.car_type_id and booking.car_id =car.car_id
GROUP BY car.car_id
ORDER BY COUNT(*) ASC
LIMIT 1;
+-----------------+-------+----------+
| registration_no | color | producer |
+-----------------+-------+----------+
| TW-435 | blue | Ford |
+-----------------+-------+----------+
1 row in set