【问题标题】:MySQL: How to display only the minimum count without the use of limit?MySQL:如何只显示最小计数而不使用限制?
【发布时间】:2015-11-25 08:59:15
【问题描述】:

这里的逻辑错误是输出显示如下:

+-----------------+-------+----------+-------+
| 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;

我就是想不出解决办法。

【问题讨论】:

  • 你试过min聚合函数吗?
  • 您可以使用 'Order By Count asc' 和 'LIMIT 1' (dev.mysql.com/doc/refman/5.0/en/select.html)
  • 是的,我尝试了 min(count),但它显​​示错误“无效使用组函数”

标签: mysql sql count output min


【解决方案1】:

按count(*)排序,然后限制在第一行

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 行之一,而不是所有三行

【讨论】:

  • 如果我决定显示最高计数会是什么查询呢?
【解决方案2】:

按计数排序,只取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

顺便说一句,使用显式连接语法。

【讨论】:

    【解决方案3】:

    我认为您需要这样的查询:

    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;
    

    【讨论】:

    • 如何去掉计数显示?我只想要除计数之外的其他显示。
    【解决方案4】:

    您可以使用此查询来选择最小计数:

    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);
    

    【讨论】:

      【解决方案5】:
      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多