繁体   English   中英

如何为特定值添加计数列(作为子选择)

[英]How to add a counting column for specific values (as sub-select)

我有一个要向其中添加列的查询。 它应该包含特定列的值在该表中出现的次数。

我目前的尝试

SELECT cleaning.*,
    (SELECT COUNT(*)
        FROM cleaning
        WHERE column_b = cleaning.column_b)
        AS multicleanamount
    FROM cleaning

正在计算每一行,因为它只是将一列与同一列进行比较 - 我理解原因。 所以当前(错误)的结果是

列_a 列_b 多清洁量
12 300 7
13 321 7
14 300 7
15 330 7
16 330 7
17 351 7
18 330 7

我现在缺少的是如何告诉子选择与第一行中的cleaning.column_b的当前值进行比较? (这是在cleaning.*

2bh 起初在我的脑海中很容易,如果我将它与像'300'这样的静态值进行比较,但该表有 74 K 个条目也是如此。 这必须是动态的。

我想要的输出是

列_a 列_b 多清洁量
12 300 2
13 321 1
14 300 2
15 330 3
16 330 3
17 351 1
18 330 3

我希望这是可以理解的。 如果不是,请告诉我,我会尝试指定更多。

使用表别名,以便您可以将子查询中的cleaning表与主查询中的表区分开来。 在您的查询中, WHERE column_b = cleaning.column_b正在将列与其自身进行比较,因此条件始终为真并且您正在计算所有行。

SELECT c1.*,
    (SELECT COUNT(*)
        FROM cleaning AS c2
        WHERE c1.column_b = c2.column_b)
        AS multicleanamount
FROM cleaning AS c1

将其编写为JOIN而不是相关子查询也可能更好:

SELECT c1.*, c2.multicleanamount
FROM cleaning AS c1
JOIN (
    SELECT column_b, COUNT(*) AS multicleanamount
    FROM cleaning
    GROUP BY column_b
) AS c2 ON c1.column_b = c2.column_b

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM