【问题标题】:MySQL GROUP BY and COUNTMySQL GROUP BY 和 COUNT
【发布时间】:2012-05-15 11:30:41
【问题描述】:

在对 mysql 表中的一些元素进行分组后,我有一个关于计数的小问题, 我有一个订单表......其中每个订单都有几行按代码分组(命名为 codcomanda)......我必须做一个查询,计算每个客户的订单数量并仅列出订单的名称和数量。

这就是我想出的(这可能很愚蠢……我不是专业程序员)

SELECT a.nume, a.tel, (
    SELECT COUNT(*) AS `count` 
      FROM (
        SELECT id AS `lwtemp` 
          FROM lw_comenzi_confirmate AS yt 
         WHERE status=1 AND yt.tel LIKE **a.tel** 
         GROUP BY yt.codcomanda
      ) AS b
  ) AS numar_comenzi 
  FROM lw_comenzi_confirmate AS a 
 WHERE status=1 
 GROUP BY tel;

数字 = 名称
tel = PHONE(这是客户端的唯一标识符,因为没有登录系统)

上述查询的问题是我不知道如何将 a.tel 与第一个选择所在的那个匹配。如果我用数据库中的数字替换它,它就可以工作....

谁能帮助我如何引用该变量? 或者关于如何完成这项工作的另一种解决方案?

如果需要更多信息,我会尽快提供。

【问题讨论】:

  • 我发现这可以工作,但生成需要 17 秒...SELECT a.nume, a.tel, ( SELECT count( DISTINCT codcomanda ) FROM lw_comenzi_confirmate WHERE STATUS =1 AND tel LIKE a.tel ) AS numar_comenzi FROM lw_comenzi_confirmate AS a WHERE STATUS =1 GROUP BY tel ORDER BY numar_comenzi DESC

标签: mysql count group-by


【解决方案1】:

如果我对您的架构的理解有误,请纠正我:

  • lw_comenzi_confirmate 包含客户的numetel
  • lw_comenzi_confirmate 包含订单详情(同表);
  • 一个订单可以在lw_comenzi_confirmate表中有多个条目,订单由codcomanda字段区分。

首先,我强烈推荐阅读Normalisation 并修复您的数据库设计。

以下内容应该可以为您完成这项工作:

SELECT nume, tel, count(DISTINCT codcomanda) AS cnt
  FROM lw_comenzi_confirmate
 WHERE status = 1
 GROUP BY nume, tel
 ORDER BY nume, tel;

您可以在SQL Fiddle 上测试此查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-17
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    相关资源
    最近更新 更多