【问题标题】:Counting Fields with Same Value计数具有相同值的字段
【发布时间】:2013-10-23 19:26:11
【问题描述】:

示例:

我有一个HUGEunion的查询,带来了很多数据,在这些数据中,我想知道,同一个人的记录有多少次只存在于name字段,Like:

加布里埃尔
- 记录 1
- 记录 2
- 记录 3

若昂
- 记录 1
- 记录 2
- 记录 3

所以 Gabriel 和 João 在我的 RecordSet 中每个人都有 3 个数据行,我需要另一个字段来计算它重复的次数,但我还需要同时需要所有行,这就是我 @987654326 的原因@使用groupby

更新 MySql 视图

【问题讨论】:

  • 您的查询不可读,不鼓励帮助您。努力并从查询中删除一些垃圾。
  • 每次我尝试删除一些垃圾并只留下基本的东西我都会变得消极......我会尝试
  • 查看此问题的 SQL 答案:stackoverflow.com/questions/19385738/… 在您的情况下,如果您将上述查询变成 VIEW,那么使用提供的链接中的方法来执行从同一视图中对 (SELECT GROUP BY) 进行 INNER JOIN 并获取您的总数。我同意其他评论者的观点,即这个查询看起来很糟糕,所以你可能会遇到我建议的方法的性能问题,但它会得到你所要求的。
  • @PlayHardGoPro - 请发布您对视图的查询,不包括计数。
  • @PlayHardGoPro - 既然您有工作视图,我将把我的查询作为答案放入。我还假设您指的是“Nome”字段,而不是您在帖子中所说的“name”。

标签: mysql


【解决方案1】:

现在您有了一个包含复杂逻辑的视图,您可以像这样构造一个查询来获取您要查找的内容:

SELECT vt.*, vtij.nome_count
FROM view_teste vt
    INNER JOIN (SELECT Nome, count(1) as nome_count FROM view_teste
        WHERE [additional_filter_conditions]
            GROUP BY Nome) vtij on vtij.Nome = vt.Nome
WHERE [additional_filter_conditions]

附加说明:(1) 这可能性能不佳,但值得尝试,因为您不是发起此查询!优化这个查询将是一个野兽。 (2) 您的视图中有一个 ORDER BY 子句,这是不必要的性能损失。您应该删除它并在查询中执行所需的 ORDER BY,而不是在您的视图中。

【讨论】:

  • 我知道这个查询是一团糟,但正如我所说,它是很久以前提出的,而不是我做的。我有点困惑,我应该在哪里运行这个?我的意思是,我以前从未使用过视图... ;X 我知道你不必回答这么愚蠢的问题,但如果你能帮我一个忙,呵呵 =x 谢谢!
  • @PlayHardGoPro - 一旦您在数据库中有一个 VIEW,您在编写查询时就将其视为一个表。 stackoverflow.com/questions/6015175/…
  • 谢谢!我只是对如何/在哪里将那条查询插入现有查询的中间感到困惑......
  • @PlayHardGoPro -- 现有查询现在被“隐藏”在数据库的视图中。我建议在您的应用程序代码中用看起来更简单的查询替换丑陋的 UNION 查询。当您引用视图时,丑陋的 UNION 查询会在数据库内部执行,而无需在您的应用程序层中使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-23
  • 2016-02-12
  • 2012-11-18
  • 1970-01-01
  • 2017-08-26
  • 1970-01-01
相关资源
最近更新 更多