【问题标题】:How to get the count as well as all the rows of the table in mysql?如何获取计数以及mysql中表的所有行?
【发布时间】:2014-11-05 15:22:52
【问题描述】:

这是我的查询:

从位置中选择location_id、location_name、display_name;

结果是:

+---------------+------------------------------------+----------------+
| location_id   | location_name                      | display_name   |
+---------------+------------------------------------+----------------+
|             1 | L1 PQR MULTIPLEX AND ENTERTAINMENT | L1 PQR         |
|             2 | Cinepolis                          | Cinepolis KP   |
|             3 | PVR FORUM MALL                     | PVR KP         |
|           333 | PRASHANTH CINEMAS                  | PRASHANTH MP   |
|          4555 | RAVI CINEMAS                       | RAVI KP        |
|        323213 | ASIAN GPR MULTIPLEX                | ASIAN KPHB     |
| 5000721013770 | PVR CENTRAL                        | PVR PUNJAGUTTA |
| 5000721017325 | PVR INORBIT                        | PVR HITECH     |
| 5000981019820 | TIVOLI CINEMAS                     | TIVOLI SC      |
| 5300181011396 | Central Panjaguttaddd              | ddd            |
+---------------+------------------------------------+----------------+
10 rows in set (0.00 sec)

我还需要在这个查询中使用 LIMIT 10 进行计数,我已经尝试过

select count(*) as count, location_id, location_name, display_name from location limit 10;

结果是:

+-------+-------------+------------------------------------+--------------+
| count | location_id | location_name                      | display_name |
+-------+-------------+------------------------------------+--------------+
|    50 |           1 | L1 PQR MULTIPLEX AND ENTERTAINMENT | L1 PQR       |
+-------+-------------+------------------------------------+--------------+
1 row in set (0.00 sec)

为什么它只获取一条记录??

我怎样才能得到计数和记录??

【问题讨论】:

  • 如果你离开限制 10 你会得到什么?
  • 如果我删除限制 10,我也会得到相同的输出。
  • 那是因为你正在使用 count(*)

标签: mysql


【解决方案1】:

select 中的count(*) 将查询转换为聚合查询。如果没有group by,则只返回一行。实际上,在大多数数据库中,它会返回错误,因为 SQL 引擎不知道如何处理剩余的列。在 MySQL 中,它们得到不确定的值。

如果您想要每一行的总计数,我建议您使用连接来获取结果:

select lc.cnt as count, l.location_id, l.location_name, l.display_name
from location l cross join
     (select count(*) as cnt from location) lc
limit 10;

如果您实际上希望每一行都有一个序列号,那么您误解了count()。为此,请使用变量:

select (@rn := @rn + 1) as count, l.location_id, l.location_name, l.display_name
from location l cross join
     (select @rn := 0) vars
limit 10;

【讨论】:

  • 感谢@Gordon,您的回答对我帮助很大。
【解决方案2】:

您在上面写的内容有 2 个问题。

select count(*) as count, location_id, location_name, display_name from location limit 10;

第一个你不应该限制计数! 其次,计数是一个“分组依据”指令,它总是会给出相同的唯一数字,

你到底想解决什么问题?

如果你希望每列有 50 分(我不明白你为什么想要这样的事情,你可以这样做

select (select count(*) from location) as count, location_id, location_name, display_name from location limit 10;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2011-08-04
    • 2020-09-25
    • 1970-01-01
    相关资源
    最近更新 更多