【问题标题】:How to get a summary count(s) in MYSQL如何在 MYSQL 中获取汇总计数
【发布时间】:2013-09-18 20:08:50
【问题描述】:

如何获得连续数字的计数。

例子

我的数据库

num1 num2 num3 num4
 10   20   30   40
 40   50   60   70
 20   10   90   80
 01   60   81   99

所以我希望结果适用于整个表格:

01 1
10 2
20 2
30 1

以此类推,如果我只想要前两行的摘要,我会得到:

10 1
20 1
30 1
40 2
50 1
60 1
70 1

【问题讨论】:

  • 在不知道您的真实数据的情况下,我认为您可能正在考虑设计问题。拥有一个只有两列的表,其中第一列是“num1”、“num2”、“num3”等,第二列是值,将允许您 GROUP_BY 第一列并在它们上执行 COUNT()
  • 不是一个好的解决方案,但是有一个技巧可以将您的四列数据组合在一列中,为此您需要联合,而对于两行,您需要限制 2,然后使用子选择并应用计数和分组方式跨度>
  • 试试这个 fiddle sqlfiddle.com/#!2/71786/2

标签: php mysql database summary


【解决方案1】:

要获得整个表的结果,您可以使用如下查询:

SELECT num, COUNT(*) cnt
FROM (
  SELECT num1 AS num FROM tableName
  UNION ALL 
  SELECT num2 AS num FROM tableName
  UNION ALL 
  SELECT num3 AS num FROM tableName
  UNION ALL 
  SELECT num4 AS num FROM tableName
) s
GROUP BY num

要仅获取前两行的结果,您可以使用 LIMIT:

SELECT num, COUNT(*) cnt
FROM (
  SELECT id, num1 AS num FROM tableName
  UNION ALL 
  SELECT id, num2 AS num FROM tableName
  UNION ALL 
  SELECT id, num3 AS num FROM tableName
  UNION ALL 
  SELECT id, num4 AS num FROM tableName
  ORDER BY id
  LIMIT 8
) s
GROUP BY num

其中 8 是 4 列 * 您想要 2 的行数,但您需要使用 ORDER BY 子句。一个例子是here

【讨论】:

  • Nope limit 8 不会定义每个查询需要 2 行您可以看到自己的小提琴您的第二个查询缺少 no 30 , 70
  • 查看使用union时在每个查询中使用limit的区别sqlfiddle.com/#!2/71786/2
  • @dianuj LIMIT 8 是正确的,但是您需要使用 ORDER BY(我在答案中指定了但我忘记在查询中添加它...),我会更新我的答案...但即使您使用多个限制,您也需要使用订单 2
  • 哇,太棒了,谢谢!做到了,但从来不知道 sqlfiddle 是多么好的测试方法!!!谢谢!!!
【解决方案2】:

您的问题的答案是您将取消透视表然后聚合:

  select (case when n.n = 1 then num1
               when n.n = 2 then num2
               when n.n = 3 then num3
               when n.n = 4 then num4
          end) as num, count(*)
  from t cross join
       (select 1 as n union all select 2 union all select 3 union all select 4) n
  group by (case when n.n = 1 then num1
                 when n.n = 2 then num2
                 when n.n = 3 then num3
                 when n.n = 4 then num4
            end);

【讨论】:

    【解决方案3】:

    如果它是用 PHP 完成的(我假设是这样),请将每个元素放入一个数组中。

    例如,前两行的$array would be array(10,20,30,40,40,50,60,70)。 然后使用print_r(array_count_values($array));

    array-count-values

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-22
      • 2023-02-01
      • 1970-01-01
      • 2013-06-07
      • 1970-01-01
      • 2012-04-08
      • 2019-08-18
      相关资源
      最近更新 更多