如何在单个查询中使用 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?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 sparkSQL 中使用从子查询中获取单个值

sql 对同一字段进行模糊查询时如何将两个条件写入一个like中

如何在查询中使用like和[重复]

SQL --------------- like 查询

如何在 SQL Server 查询中同时使用 LIKE 和 NOT LIKE

postgresql----LIKE和SIMILAR TO