当前位置: 首页 > 知识库问答 >
问题:

MySQL:无论数字的位置如何对数字进行分组

通奕
2023-03-14

这听起来有点令人困惑,我不知道如何用语言表达,但我很难找到这个问题的解决方案。

我想按行“分组”,并使用数字相同的“digit”列在表中对行进行计数,而不管数字的位置如何。

例子:

这是桌子

答案是:使用count()

其他详细信息:

  • 数字列为数字

mysql版本是来自cpanel的82。

共有3个答案

芮琛
2023-03-14
drop table if exists t;
create table t(id int,name varchar(20),digit int);
insert into t values
(1, 'name1',    123),
(2, 'name2',    213),
(3, 'name3',    132),
(4, 'name4',    122),
(5, 'name5',    456),
(6, 'name5',    77),
(7, 'name5',    1),
(8, 'name5',    1);

    with cte as
    (
    select distinct substring(digit,1,1) + substring(digit,2,1) + substring(digit,3,1) digit from t
    )
    select min(id) id,min(name) name,min(t.digit) digit,count(*) cnt
    from   cte
    join   t on   substring(t.digit,1,1) + substring(t.digit,2,1) + substring(t.digit,3,1) = cte.digit
    group  by cte.digit;

+------+-------+-------+-----+
| id   | name  | digit | cnt |
+------+-------+-------+-----+
|    7 | name5 |     1 |   2 |
|    4 | name4 |   122 |   1 |
|    1 | name1 |   123 |   3 |
|    6 | name5 |    77 |   1 |
|    5 | name5 |   456 |   1 |
+------+-------+-------+-----+
5 rows in set, 15 warnings (0.002 sec)
姜天宇
2023-03-14
WITH 
parsed AS ( SELECT id, name, Digit DIV 100 val FROM test
            UNION ALL
            SELECT id, name, Digit MOD 100 DIV 10 FROM test
            UNION ALL
            SELECT id, name, Digit MOD 10 FROM test ),
sorted AS ( SELECT id, name, GROUP_CONCAT(val ORDER BY val SEPARATOR '') Digit
            FROM parsed
            GROUP BY id, name )
SELECT MIN(name) Name, Digit, COUNT(*) `Count`
FROM sorted
GROUP BY Digit
冯和硕
2023-03-14

您可以将Digit列的个位数视为3D空间中的坐标。如果交换坐标,则生成的向量将具有相同的长度。您可以使用此属性创建有效的查询:

SELECT Name, Digit, COUNT(*) as C
FROM t
GROUP BY(
    POW(CAST(SUBSTRING(digit, 1, 1) AS UNSIGNED),2) +   -- first digit
    POW(CAST(SUBSTRING(digit, 2, 1) AS UNSIGNED),2) +   -- second digit
    POW(CAST(SUBSTRING(digit, 3, 1) AS UNSIGNED),2)     -- third digit
);

我不计算平方根,因为我们对精确的长度不感兴趣。我将列命名为c,而不是count,因为count在SQL中是保留字。

 类似资料:
  • 问题是: 你有N (N代表你拥有的数字的数量)个数字。将他们分成两组,使各组数字之和的差异最小。 例子: 如果我们把1、9和3放在A组,把5和8放在B组,差异是0。 我认为首先我应该计算所有数字的总和并将其除以2。然后检查任何可能的数字组合,其总和不大于所有数字之和的一半。完成此操作后,我将选择最大的数字并打印出组。 我对所有的组合都有问题,特别是当N是大数字时。如何运行所有组合? 我的想法也有点

  • 本文向大家介绍MySQL查询以字符串字段中的数字字符对行进行分组?,包括了MySQL查询以字符串字段中的数字字符对行进行分组?的使用技巧和注意事项,需要的朋友参考一下 为此,您可以在+运算符的帮助下将0与字符串字段连接起来。这里的场景就像我们需要从字符串字段“ 9844Bob ”中获取数字“ 9844 ”。 让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所

  • 问题内容: 所以我有这张桌子。它有几百行。每行中都有一个日期时间字段。我需要完成的是获取给定时间段内有多少行,而不是整个时间段,而是该时间段的每一天。到此为止,我知道该怎么办。但是,此外,我还需要在表中没有值0的日期的行。 因此,例如: 应该给我这样的结果: 任何人都可以帮忙吗? 问题答案: 为了处理带有0条对应记录的日期,我的常规做法是使用日历表进行联接。 例如,创建一个表,其中一个字段称为,并

  • 我有以下模式- [名称:StringType,Grades:ArrayType(StructType(StructField(subject_grades),ArrayType(StructType(StructField(subject,StringType,false)),StructField(grade,LongType,false) 我想在数组中的subject字段上,该数组位于grad

  • 问题内容: 我在排序包含整数的字符串时遇到问题。如果使用下面的代码,我将进行排序:1some,2some,20some,21some,3some,一些 但是我希望将其排序为:1some,2some,3some,20some,21some,一些 我怎样才能做到这一点? 谢谢! 问题答案: 这是有关如何执行此操作的独立示例(未特别优化): 输出量 说明 该示例使用一个常数来推断数字是否位于的起始位置。

  • 问题内容: 首先,我发布此内容是因为当我在寻找以下问题的解决方案时,我在stackoverflow上找不到该解决方案。因此,我希望在此处增加一些知识库。 我需要处理目录中的某些文件,并且需要对文件进行数字排序。我在wiki.python.org上找到了一些有关排序的示例(尤其是使用模式),并将它们放在一起: 我对Python还是很陌生,想问一下社区是否可以对此进行任何改进:缩短代码(删除),性能,