我有下表名为Find,我想返回名称同时包含" / topic"的SessionID号码。和" / detail"。因此,它应该在我的情况下返回1,因为只有SessionID = 1同时具有" / topic"和" / detail"在列"名称"。
我尝试使用以下代码,但我想我再次搞砸了GROUP BY。
THX!
Select count( distinct `SessionID`)
from Find
where `name` like "/detail%"
and `name` like "/topic%"
group by `SessionID`, `date`
order by `date`;
我还有一个名为" date"这没有出现在我的截图中。列日期告知收集SessionID的日期。所以我认为我可以按照上面提到的目的将SessionID分组,然后按日期分组。因此,最后,我将了解每天会议ID会议要求的数量。
答案 0 :(得分:1)
您需要分两步分隔查询。首先,您需要查找包含/details%
和/topic%
的会话。然后你可以数数。
透视名称查找行
SELECT
SessionID,
MAX(CASE WHEN name LIKE "/detail%" THEN 1 END) AS hasDetail,
MAX(CASE WHEN name LIKE "/topic%" THEN 1 END) AS hasTopic
FROM Find
GROUP BY SessionID
子查询的结果是:
SessionID hasDetail hasTopic
--------- --------- --------
1 1 1
2 1
3 1
计算结果
SELECT COUNT(*)
FROM
(
SELECT
SessionID,
MAX(CASE WHEN `name` LIKE "/detail%" THEN 1 END) AS hasDetail,
MAX(CASE WHEN `name` LIKE "/topic%" THEN 1 END) AS hasTopic
FROM Find
GROUP BY SessionID
) AS A
WHERE A.hasDetail = 1 AND A.hasTopic = 1;
此查询是为MySQL数据库编写的,如果您需要其他SQL语句,请告诉我,如SQL Server的T-SQL。
答案 1 :(得分:0)
您只是需要将日期和计数包含在不同的列中。像这样:
Select `SessionID`, `date`, count(*) as number
from Find
where `name` like "/detail%"
or `name` like "/topic%"
group by `SessionID`, `date`
order by `date`;