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

标签 mysql sql select

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

|  a  |   b   |      c      |
|---  |----   |-------      |
| 1A  |  1B   | (null)      |
| 2A  |  2B   |     1A      |
| 3A  |  3B   |     1A      |

我现在想要

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

这就是预期的输出:

|  a  |   b   |      c      | count     |
|---  |----   |-------      |------     |
| 1A  |  1B   | (null)      |     2     |
| 2A  |  2B   |     1A      |     0     |
| 3A  |  3B   |     1A      |     0     |

对于第一行,“1A”也出现在第二行和第三行的c中。 但是,“2A”或“3A”不会出现在 c 中的其他任何位置。

我已尝试以下操作 ( SQL Fiddle ):

create table test (a varchar(30), b varchar(30), c varchar(30));

insert into test (a, b) values ("1A", "1B");
insert into test (a, b, c) values ("2A", "2B", "1A");
insert into test (a, b, c) values ("3A", "3B", "1A");

select *, (select count(*) from test where test.c = a) as count from test;

但是,count 始终为 0

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

最佳答案

您可以使用子查询:

select t.*,
       (select count(*) from test t2 where t2.c = t.a)
from test t;

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

关于mysql - 根据当前表和每个单独的行向 SQL SELECT 查询输出添加额外的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58748354/

相关文章:

PHP/MySQL - 创建多维数组

c# - 发布我的第一个应用程序 -> 权限被拒绝

java - ORA-00979 : not a GROUP BY expression

java - 我应该如何将值传递到 JPQL 查询中?

mysql - 列出姓氏以 "L"开头的员工

mysql - 从具有多个字段的选择更新?

mysql - 从查询中得到错误的计数

mysql - 使用 bash 脚本运行带重音符号 (`) 的 MySQL 命令

ios - 具有自定义数据库的 AWS AppSync 是否支持订阅?

mysql - 模式匹配 MySql 搜索?