如何编写一个SQL查询,它将在一个表的同一列中计算两种类型的值?

时间:2015-08-23 15:09:54

标签: mysql sql

我有一个表名'demo',其中包含字段ID(PK),用户和带有以下数据的项目:

id  user item
==  ==== =====
1   anuj    A
2   anuj    A
3   anuj    A
4   anuj    B
5   anuj    B
6   anuj    B
7   patil   A
8   patil   A
9   patil   A
10  rahul   B
11  rahul   B
12  tanmay  A
13  tanmay  A

现在我想写一个查询,它会给我这样的结果:

User   Count of A    Count of B
====   ==========    ===========
anuj   3             3
patil  3             0
rahul  0             2
tanmay 2             0

基本上这可能吗?我试过但没有成功。

2 个答案:

答案 0 :(得分:2)

使用void radixSort(int *a, int arraySize) { int i, bucket[arraySize]; int maxVal = 0; int digitPosition =1; for(i = 0; i < arraySize; i++) { if(a[i] > maxVal) maxVal = a[i]; } int pass = 1; while(maxVal/digitPosition > 0) { int digitCount[10] = {0}; for(i = 0; i < arraySize; i++) digitCount[a[i]/digitPosition%10]++; for(i = 1; i < 10; i++) digitCount[i] += digitCount[i-1]; for(i = arraySize - 1; i >= 0; i--) bucket[--digitCount[a[i]/digitPosition%10]] = a[i]; for(i = 0; i < arraySize; i++) a[i] = bucket[i]; digitPosition *= 10; } }

Conditional Aggregate汇总中的

Case statement将生成count1。由于聚合函数消除了NULL值,因此只有满足条件时,计数才会考虑计数值

NULL

答案 1 :(得分:2)

select
user,
sum(if(item="A",1,0)) as "count of A",
sum(if(item="B",1,0)) as "count of B"
from
demo
group by user;