mysql - 我想按姓氏对我的表进行分区?

标签 mysql sql

<分区>

我希望能够计数,然后根据 C.LastName 的计数对我的表进行分区。我刚刚学习 SQL,并不完全确定 COUNT(...) 行在程序中的工作方式。

这是根据 LastName 对表进行计数和分区的正确方法吗?

出于某种原因,SQL 中的这行代码似乎很难看清它是如何工作的。

 select C.*,
        COUNT(*) over (partition by c.LastName) as '--Count--'
 from Customer C;

表:

PrimaryKey  FirstName   LastName    MiddleName  PhoneNumber Address1    Address2    City    State   Zipcode
1   Test1                   LTest1                  MTest1                  5555555555      555 Governors                                       5555 Governors Avenue                               Pierre      TT          99999
2   Test2                   LTest2                  MTest2                  4444441234      444 Governors Street                                4444 Governors Blvd                                 Bill        PP          44444
3   Test3                   LTest3                  MTest3                  3333331234      333 Governors Street                                3333 Governors Street                               Pop         RR          33333
4   Test1                   LTest1                  MTest9                  7777777777      77 Governors Avenue                                 7 Governors Street                                  Yet         UU          22222
10  FirstName               LastNme                 MiddleName              8888888889      321 H Street                                        4321 U Street                                       TownUSA     VB          77777
11  NULL    A                       NULL    NULL    NULL    NULL    NULL    NULL    NULL
12  NULL    A                       NULL    NULL    NULL    NULL    NULL    NULL    NULL
13  NULL    A                       LTest                   NULL    HTest                                               NULL    NULL    NULL    NULL
14  Test14                  LTest14                 MTest14                 1231231234      123 VVV                                             Billings                                            Billings    NULL    NULL
15  NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
16  NULL    A                       NULL    NULL    NULL    NULL    NULL    NULL    NULL
17  NULL    A                       NULL    NULL    NULL    NULL    NULL    NULL    NULL
18  NULL    A                       NULL    NULL    NULL    NULL    NULL    NULL    NULL
19  NULL    test                    NULL    NULL    NULL    NULL    NULL    NULL    NULL
20  NULL    NULL    NULL    1               123 ave                                             123 ave                                             NULL    NULL    NULL

客户表:

1   Test1                   LTest1                  MTest1                  5555555555      555 Governors                                       5555 Governors Avenue                               Pierre      TT          99999
2   Test2                   LTest2                  MTest2                  4444441234      444 Governors Street                                4444 Governors Blvd                                 Bill        PP          44444
3   Test3                   LTest3                  MTest3                  3333331234      333 Governors Street                                3333 Governors Street                               Pop         RR          33333
4   Test1                   LTest1                  MTest9                  7777777777      77 Governors Avenue                                 7 Governors Street                                  Yet         UU          22222
10  FirstName               LastNme                 MiddleName              8888888889      321 H Street                                        4321 U Street                                       TownUSA     VB          77777
11  NULL    A                       NULL    NULL    NULL    NULL    NULL    NULL    NULL
12  NULL    A                       NULL    NULL    NULL    NULL    NULL    NULL    NULL
13  NULL    A                       LTest                   NULL    HTest                                               NULL    NULL    NULL    NULL
14  Test14                  LTest14                 MTest14                 1231231234      123 VVV                                             Billings                                            Billings    NULL    NULL
15  NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
16  NULL    A                       NULL    NULL    NULL    NULL    NULL    NULL    NULL
17  NULL    A                       NULL    NULL    NULL    NULL    NULL    NULL    NULL
18  NULL    A                       NULL    NULL    NULL    NULL    NULL    NULL    NULL
19  NULL    test                    NULL    NULL    NULL    NULL    NULL    NULL    NULL
20  NULL    NULL    NULL    1               123 ave                                             123 ave   

                                        NULL    NULL    NULL

新查询:

SELECT C.*,
        A.B as "--Count--"
FROM Customer c
INNER JOIN
(
  SELECT lastname,
         count(*) as B
  FROM customer
  GROUP BY lastname
) A
ON c.lastname = A.lastname;

谢谢你向我展示这个例子。计数 (*) 是否为 B(我更改了一些变量只是为了让我知道你可以。A 和 B 不是很好用的变量名。

作为 B 的计数 (*) 是否引用该选择语句中的姓氏。这是我唯一不确定的陈述。

最佳答案

如果您使用的是 MySQL,则 COUNT(*) 不是受支持的分析函数。您可以使用以下查询获得相同的结果:

SELECT 
    C.*,
    counts_lastname.cnt_lastname as "--Count--"
FROM Customer c
INNER JOIN
(
  SELECT 
  lastname,
  count(*) as cnt_lastname
  FROM customer
  GROUP BY lastname
) counts_lastname
ON c.lastname = counts_lastname.lastname;

引用资料:

Analytic functions: SUM, AVG, ROW_NUMBER on EXPLAIN EXTENDED blog

A related question on SO

关于mysql - 我想按姓氏对我的表进行分区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23430881/

相关文章:

mysql - 加快自连接sql查询速度

sql - 与Oracle CONNECT BY的混淆

sql - 文档存储的最佳用途是什么?

关于UPDATE的Mysql问题

mysql - 导入文件时出现错误 "1366 Incorrect integer value: ' 1'"

MySQL计算yyyy-mm-dd到天

mysql - 将查询从 MySQL 转换为 SQL Server

java - 匹配来自两个不同表的两列的字符串

php - 将复选框值插入数据库

mysql - 删除mysql中的重复项(2个表)