我有一个查询,用于计算数据库中每个合作伙伴的提及次数。

查询如下所示:

SELECT partner, COUNT(*) AS Total
FROM database.data
GROUP BY 1;

输出如下所示:

partner  | total
---------+------
X        | 5
Y        | 3
Z        | 2
X aa     | 6
aa X     | 7
Y aa     | 1

我需要做的是像XX aaaa X这样的伙伴一起计算在一行中( YY aa相同。我最后尝试添加HAVING功能,但无法使其工作并且不确定它实际上是否适合使用。

将不胜感激任何帮助! 谢谢!

#1楼 票数:0

无优化:

WITH RECURSIVE
-- rank by length
cte1 AS ( SELECT partner, total, DENSE_RANK() OVER (ORDER BY LENGTH(partner)) rnk
          FROM  data ),
-- find pairs where partner is a substring of anoter partner
cte2 AS ( SELECT partner, total, rnk, partner short
          FROM cte1
          WHERE rnk = 1
          UNION ALL
          SELECT cte1.partner, 
                 cte1.total, 
                 cte1.rnk, 
                 CASE WHEN LOCATE(cte2.partner, cte1.partner)
                      THEN cte2.partner
                      ELSE cte1.partner
                      END
          FROM cte1, cte2
          WHERE cte1.rnk = cte2.rnk + 1 ),
-- select shortest
cte3 AS ( SELECT partner, 
                 total, 
                 rnk, short, 
                 ROW_NUMBER() OVER (PARTITION BY partner ORDER BY LENGTH(short)) rn
          FROM cte2 )
-- get needed data
SELECT short partner, SUM(total) total
FROM cte3 
WHERE rn = 1
GROUP BY short
ORDER BY partner

小提琴

#2楼 票数:0

我认为应该这样做:

SELECT d1.partner, COUNT(*) AS Total
FROM (SELECT * FROM database.data d1
    WHERE CHAR_LENGTH(d1.partner) = 1
    GROUP BY d1.partner
    ) d1
-- i
LEFT JOIN database.data d2 ON
        -- get x in aa x and x aa
        d2.partner LIKE CONCAT('%', d1.partner, '%')
-- remoove x aa and aa x from the count table
GROUP BY d1.partner;

使用模拟数据:

CREATE TABLE IF NOT EXISTS tmp_mock_data
SELECT * FROM (
                  SELECT 'X' partner
                  UNION ALL
                  SELECT 'Y'
                  UNION ALL
                  SELECT 'Z'
                  UNION ALL
                  SELECT 'Y aa'
                  UNION ALL
                  SELECT 'Z aa'
                  UNION ALL
                  SELECT 'X aa'
                  UNION ALL
                  SELECT 'aa Z'
                  UNION ALL
                  SELECT 'aa Y'
                  UNION ALL
                  SELECT 'aa X'
              ) A
CROSS JOIN (SELECT NULL UNION ALL SELECT NULL) B;
SELECT d1.partner, COUNT(*) AS Total
FROM (SELECT * FROM tmp_mock_data d1
    WHERE CHAR_LENGTH(d1.partner) = 1
    GROUP BY d1.partner
    ) d1
-- i
LEFT JOIN tmp_mock_data d2 ON
        -- get x in aa x and x aa
        d2.partner LIKE CONCAT('%', d1.partner, '%')
-- remoove x aa and aa x from the count table
GROUP BY d1.partner;
DROP TABLE tmp_mock_data;

#3楼 票数:0

SELECT partner,COUNT(*) AS Total

FROM(

SELECT (CASE WHEN ASCII(LEFT(partner,1)) BETWEEN 65 AND 90 THEN  LEFT(partner,1) ELSE RIGHT(partner,1) END)  AS partner

FROM database.data)

GROUP BY 1;

  ask by Mark translate from so

未解决问题?本站智能推荐:

1回复

MySQL查询找出匹配记录

我有3张桌子:1)客户2)租赁3)演员。 我想要这样的结果:出租桌包含客户租借的电影 我们将从以下查询中获取结果: 而我想要的就是这个结果:我必须在actors表中找出具有相同名字和姓氏的客户。 我已经执行了一个查询,以使用此查询在customers表和actor表之间找到匹配结
2回复

我需要优化这个MYSQL查询

我试过 NOT EXIST 但没有得到预期的结果 不能做索引,因为student_id,status 的重复条目是有效条目,需要减少执行时间,因为表有大量数据。
1回复

在不同的表中使用相同的字段名称然后进行联合查询是否存在任何问题?

我有多个共享相同字段名称和类型的表。 这些表除了名称外完全相同: table1和table2 。 我将SHOW CREATE TABLE table1 : 我确实会像这样进行联合查询(尽管联合语法很旧,但是我在整个项目中一直在使用它,所以我现在不喜欢做更改): 在这种情况下是否有任何
2回复

如何在Mysql服务器中查找完全匹配和部分匹配

用户提供输入,输入可以是完整名称或部分名称。 查询应显示所有匹配的输出。 这是我正在使用的代码 我正在使用 python 并且输出是一个看起来不正确的空列表。
1回复

DjangoFutureFqType匹配查询不存在

我正在使用Django建立一个新网站,并希望从sql获取一个对象名称。 但它保持输出错误对象。匹配查询不存在我在哪里需要修改代码? 意见 HTML 楷模 我希望{{cname}}的输出是数据,但实际不能输出它出现错误FutureFqType匹配查询不存在。 新观点 页面
2回复

如何在MysqlWorkBench中进行查询?

我有一个包含插入和创建表的.sql脚本。 我使用了“通过脚本创建EER模型” 它创建了表,但是我看不到这些表中的数据。 我去了查询菜单并尝试进行查询,但是它给我一个关于无法连接到本地主机的错误。 我做对了吗?
1回复

查询执行需要很长时间

我目前正在使用mysql 我有两个表,分别称为person和zim_list_id,两个表都有超过200万行 我想使用zim_list_id表更新人员表 我正在使用的查询是 我还在zim_list_id表和person表上创建了索引,我执行的查询是 查询执行需要很长时间。