【问题标题】:SQL count not return all rows, phpmyadmin add LIMIT but not show it in the querySQL 计数不返回所有行,phpmyadmin 添加 LIMIT 但不在查询中显示
【发布时间】:2015-04-30 09:15:42
【问题描述】:

我有一个问题:

select lr2.event_id as ce
from data_requests as lr2 
group by lr2.event_id, 

返回 88 行。然后我尝试了以下方法:

select count(lr2.event_id) as cc, lr2.event_id as ce 
from data_requests as lr2 
group by lr2.event_id

但它只返回了 25 行,所以我真的很困惑,其他 63 行去哪里了。

我在 sqlfiddle 中尝试过,它似乎可以正常工作,但在我的服务器上它只是没有,所以它必须是一个设置或其他东西......感觉就像服务器在选择所有子集后计算计数分组结果。很奇怪。

【问题讨论】:

  • 第二个查询中缺少哪个 event_id?
  • 您使用的是哪个 DBMS?后格雷斯?甲骨文?
  • 只有在有 63 DISTINCT event_ids 的情况下,您才会在第二次查询中获得 63 行
  • 我猜你对event_id 有多次相同的值。 group by 意味着 event_id 列上的不同。如果您将count(event_id) 更改为count(*),您将看到每个event_id 的重复数
  • 那么请设置一个sqlfiddle.com来显示这个

标签: mysql sql aggregate-functions mysql-5.6


【解决方案1】:

如果你想计算每个 lr2.event_id 的行数,你必须使用 count(*) ,而不是 count(lr2.event_id) 。请记住,您是在计算行数。

【讨论】:

  • 哪里说OP对每个event_id的行数有问题?他想知道为什么两个查询即使使用相同的GROUP BY 也会返回不同的行数。
  • 第一个查询类似于select distinct lr2.event_id,但第二个查询是计数字段。当您在分组查询中使用诸如计数之类的聚合函数时,通常用于选择所有匹配的行
  • 如果 count(*) 也不起作用,我和你一样困惑。查询太简单了。试试select distinct event_id from data_requests 看看有多少行返回
【解决方案2】:

GROUP BY的功能

SQLGROUP BY 子句与SELECT 语句配合使用,将相同/相似/相等的数据排列成组。

演示
如果我有如下表,那么第一个查询将给出与表定义相同的输出:

ce
--
1
2
3
4
5

第二个查询将给出输出,

cc |ce
--- ---
1   1
1   2
1   3
1   4
1   5

由于表中都是distinct,所以我得到了5行!但是如果某些ce 值是重复的,

ce
--
1
2
1
2
2

然后,第二个查询将输出为:

cc |ce
--- ---
2   1
3   2

如果我感到震惊其他 3 行去哪儿了?那我要学习了! 当然是用勺子喂了! OP需要研究SQL中的GROUP BY。

【讨论】:

    【解决方案3】:

    我的错,这似乎是一个 phpmyadmin 的问题,我在 phpmyadmin 中运行查询,它在每个查询的末尾自动添加了一个限制

    【讨论】:

    • 将您自己的答案标记为正确并更改标题,以便任何有相同问题的人都能找到您的解决方案。如果您可以添加先前查询的结果,那么很明显您没有错过条件,更好
    猜你喜欢
    • 2013-03-02
    • 1970-01-01
    • 2011-07-26
    • 2015-05-28
    • 1970-01-01
    • 2018-10-11
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多