MySQL:计算一列中的值在另一列中出现的次数

  • 本文关键字:一列 计算 MySQL mysql sql
  • 更新时间 :
  • 英文 :


在我的数据库中,我有一个用户表,其中一列为user_ID,另一列为整个"的路径;树";。

/200/840/780/1200
user_id promoter_path
1200
1785 /14/74/787/898/1047/1687/1785
2687 /2687
7847 /200/840/780/1200/5870/7847

失去max。您还想在like:中的user_id周围添加%

select u.user_id as name,
(
select count(*) from users where promoter_path like concat('%', u.user_id, '%')
) as c
from users as u

顺便问一下,OP,你确定它不应该是:

select u.user_id as name,
(
select count(*) from users
where promoter_path like concat('%/', u.user_id, '/%')
or promoter_path like concat('%/', u.user_id)
) as c
from users as u

因为'/11200/something' like '%1200%'的计算结果为true。。。

SELECT
u1.id, COUNT(u2.id)
FROM users u1 LEFT JOIN users u2
ON
u2.promoter_path LIKE concat('%/', u1.id, '/%') 
OR pomoter_path like concat('%/', u.user_id) 
GROUP BY
u1.id;

它的作用是:

  1. 将每个用户与promoter_path包含其id的用户配对(这可能是同一用户的事件(
  2. 统计与每个用户配对的用户数

LEFT JOIN很重要,所以我们也会得到没有匹配项的用户。

最新更新