5

我环顾四周,但找不到答案 我需要一个查询,该查询根据同一字段中的值返回 2 组值作为字段名称

例如我有一张桌子

名称,价值
名称 1, 2
名称 1, 2
姓名 1, 3
姓名 1, 4
名称 2, 2
名称 2, 2
名称 2, 3
名称 2, 4

现在我想在一个组中计算和分组值 2 和 3,在另一组中计算值 4,所以我的结果看起来像这样

NAME,GRP1_COUNT,GRP2_COUNT
姓名1, 3, 1
姓名 2, 3, 1

我试过了JOINUNION但运气不好,任何帮助表示赞赏

4

2 回答 2

15

MySQL 没有数据透视函数,因此您必须使用带有CASE表达式的聚合函数来转换数据。对于这种类型的计算,您将使用COUNTSUM

select name,
  sum(case when value in (2,3) then 1 else 0 end) GRP1_COUNT,
  sum(case when value = 4 then 1 else 0 end) GRP2_COUNT
from yourtable
group by name

请参阅带有演示的 SQL Fiddle

COUNT版本:

select name,
  count(case when value in (2,3) then VALUE end) GRP1_COUNT,
  count(case when value = 4 then VALUE end) GRP2_COUNT
from yourtable
group by name

请参阅带有演示的 SQL Fiddle

于 2013-03-21T20:08:29.870 回答
5

尝试这个

SELECT
name,
sum(case when value=2 or value=3 then 1 else 0 end),
sum(case when value=4 then 1 else 0 end)
FROM YourTable
GROUP BY name
于 2013-03-21T20:08:18.147 回答