2013-03-21 57 views
5

我环顾四周,但找不到答案 我需要一个查询返回2组值作为在同一领域mysql的多计和组值

例如基于值字段名我有一个表

NAME, VALUE 
name1, 2 
name1, 2 
name1, 3 
name1, 4 
name2, 2 
name2, 2 
name2, 3 
name2, 4

现在我想计数和组中的另一组值2和3的一组和值4,所以我的结果是这样的

NAME, GRP1_COUNT, GRP2_COUNT 
name1, 3, 1 
name2, 3, 1

我试过JOINUNION没有多少运气 任何帮助表示赞赏

+0

搜索 “MySQL的行列” 和“MySQL的枢轴” – Kermit 2013-03-21 20:08:00

回答

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 
+1

@GordonLinoff当发表一个代码只有答案时不那么难做。这并不是说这个答案不值得赞扬,但是这个比较是不公平的。 – Lamak 2013-03-21 20:19:21

+0

@Lamak。 。 。当我写这个评论时,两个答案都只有代码。另一个答案已经被修改并且在解释方面有了很大的改进(蓝色通常就是这样)。 – 2013-03-21 20:21:41

+2

我很高兴我在这个网站(或任何这样的网站)上有史以来的第一个答案与专家拥有完全相同的代码! – 2013-03-21 20:26:50

14

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 with Demo

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 with Demo

+0

有没有更好的方法?不包括硬性价值。 – Deckard 2014-02-18 01:30:42

+0

@Deckard是的,你可以使用预处理语句来执行动态sql – Taryn 2014-02-18 01:44:57