gpt4 book ai didi

mysql - 如何不重复派生表的子查询

转载 作者:行者123 更新时间:2023-11-30 00:33:22 24 4
gpt4 key购买 nike

我想知道某列的值在结果中出现了多少次,并将其包含在每行结果的列中。如何在不重复派生表子查询两次的情况下实现此目的?如果我在 COUNT 子查询中用“t”替换 (衍生表),则表示该表不存在。

SELECT
col1,
col2,
col3,
(SELECT COUNT(*) FROM (derivedtable) WHERE t.col1=col1)
FROM (derivedtable) AS t

最佳答案

你可以只使用group by吗?

SELECT col1, col2, col3, COUNT(*)
FROM (derivedtable) AS t
GROUP BY col1;

这将返回 col2col3 的任意值。您可以使用group_concat()获得完整列表:

SELECT col1, group_concat(col2) as col2s, group_concat(col3) as col3s, COUNT(*)
FROM (derivedtable) AS t
GROUP BY col1;

编辑:

如果您确实想在不重复派生表的情况下执行此操作,则可以使用变量:

SELECT col1, col2, col3,
@col1cnta := if(@col1a = col1, @col1cnta, col1cnt) as col1cnt,
@col1a := col
FROM (SELECT col1, col2, col3,
@col1cnt := if(@col1 = col1, 0, @col1cnt) + COUNT(*) as col1cnt,
@col1 := col1
FROM (derivedtable) t cross join
(select @col1 := '', @col1cnt := 0) const
GROUP BY col1
) t cross join
(select @col1a := '', @col1cnta := 0) const
ORDER BY col1, col1cnt desc;

这里的想法是对三列的每个组合进行子计数。然后,按 col1 对结果进行排序,但计数按相反顺序排列,并复制给定 col1 的所有行中的最大值。

关于mysql - 如何不重复派生表的子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22359963/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com