假设我有下表,其中已插入这些行:
| 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/