根据当前表和每个单独的行向 SQL SELECT 查询输出添加额外的列

Ish*_*res 3 mysql sql select

假设我有下表,其中已插入这些行:

|  a  |   b   |      c      |
|---  |----   |-------      |
| 1A  |  1B   | (null)      |
| 2A  |  2B   |     1A      |
| 3A  |  3B   |     1A      |
Run Code Online (Sandbox Code Playgroud)

我现在想要

  • SELECT查询中表中的所有内容以及
  • 还计算每行a相应行在c整个表中出现的频率。

预期输出应如下所示:

|  a  |   b   |      c      | count     |
|---  |----   |-------      |------     |
| 1A  |  1B   | (null)      |     2     |
| 2A  |  2B   |     1A      |     0     |
| 3A  |  3B   |     1A      |     0     |
Run Code Online (Sandbox Code Playgroud)

对于第一行,“1A”也出现在c第二行和第三行中。然而,“2A”或“3A”不会出现在 中的其他任何地方c

我已经尝试过以下(SQL Fiddle):

|  a  |   b   |      c      |
|---  |----   |-------      |
| 1A  |  1B   | (null)      |
| 2A  |  2B   |     1A      |
| 3A  |  3B   |     1A      |
Run Code Online (Sandbox Code Playgroud)

然而,count始终是0

如何在一个查询中实现上述目标?我将不胜感激任何帮助!:)

Gor*_*off 5

您可以使用子查询:

select t.*,
       (select count(*) from test t2 where t2.c = t.a)
from test t;
Run Code Online (Sandbox Code Playgroud)

这就像您的版本,但它使用正确的表别名。始终限定所有列引用。