mysql选择以获取在同一结果行中按列分组的行

时间:2014-04-16 07:29:02

标签: mysql

表1:

bookid type 
 1      A
 2      B
 3      A

表2

recordid bookid   

  1         1        
  1         2        
  1         3

有没有办法让输出为

recordid count(A) count(B)
  1           2       1

我尝试通过左边连接两个表进行分组,但这样可以得到如下输出:

recordid type count
 1          A   2
 1          B   1

请建议获得所需输出的最佳方式。

3 个答案:

答案 0 :(得分:0)

你可以试试这个:

SELECT 
t2.recordid,
count(CASE WHEN t1.type='A' THEN 1 ELSE NULL END) as CountA,
count(CASE WHEN t1.type='B' THEN 1 ELSE NULL END) as CountB,
FROM Table1 t1
INNER JOIN Table2 t2 on t1.bookid=t2.bookid
GROUP BY t2.recordid

答案 1 :(得分:0)

您也可以将SUM()与表达式一起使用,使用带表达式的sum将得到一个布尔值1和0,您可以根据条件得到计数

SELECT 
t2.recordid,
SUM( t1.type='A')  `CountA`,
SUM( t1.type='B')  `CountB`,
FROM Table1 t1
JOIN Table2 t2 USING(bookid)
GROUP BY t2.recordid

答案 2 :(得分:0)

如果您有限制列类型值,我认为很容易做到。但是如果你有这么多的列类型值,似乎只有一种方法是用光标做的过程。