如何在单个查询中使用 count、'like' 和 group by?
Posted
技术标签:
【中文标题】如何在单个查询中使用 count、\'like\' 和 group by?【英文标题】:How to use count,'like' and group by in single query?如何在单个查询中使用 count、'like' 和 group by? 【发布时间】:2017-06-03 18:09:01 【问题描述】:我需要类似的东西
SELECT sum(case when name LIKE 'nick-1%' then 1 end) as Count,
name
FROM dummytable
GROUP BY CASE
WHEN name LIKE 'nick-1%' THEN 'nick'
WHEN name LIKE 'vicky-1%' THEN 'vicky'
ELSE NULL
END
Name Count
nick 10
vicky 17
nick 表示它应该包含像 'nick%' 这样的名称 vicky 表示它应该包含像 'vicky%' 这样的名称
在我的查询中,我无法查看名称列,因为使用 sum 它要求我将其添加到分组依据,但我无法将其添加到分组依据,因为我使用了类似的函数
【问题讨论】:
在我的查询中,我无法查看名称列,因为使用 sum 它要求我将其添加到分组依据,但我无法将其添加到分组依据,因为我正在使用类似的功能跨度> 您的查询对我来说完全没有意义。您能否向我们展示来自dummytable
的示例数据以及您的预期输出。
【参考方案1】:
要解决您遇到的问题,您只需在SELECT
中重复您当前在GROUP BY
中使用的相同CASE
表达式:
SELECT CASE WHEN name LIKE 'nick-1%' THEN 'nick'
WHEN name LIKE 'vicky-1%' THEN 'vicky'
ELSE NULL END AS Name,
COUNT(*) AS Count
FROM dummytable
GROUP BY CASE WHEN name LIKE 'nick-1%' THEN 'nick'
WHEN name LIKE 'vicky-1%' THEN 'vicky'
ELSE NULL END
在您的原始查询中,您混合了两种类型的聚合。如果您想在整个表上使用条件聚合,您原来的 SELECT
试图这样做,您可以使用以下查询:
SELECT 'nick' AS Name, SUM(CASE WHEN name LIKE 'nick-1%' THEN 1 ELSE 0 END) AS Count
FROM dummytable
UNION ALL
SELECT 'vicky', SUM(CASE WHEN name LIKE 'vicky-1%' THEN 1 ELSE 0 END)
FROM dummytable
【讨论】:
以上是关于如何在单个查询中使用 count、'like' 和 group by?的主要内容,如果未能解决你的问题,请参考以下文章
sql 对同一字段进行模糊查询时如何将两个条件写入一个like中