Select MySQL 使用不同 where 语句的查询中的多个计数

Select multiple count in MySQL query with different where statements

我有两个表,我想在加入它们后找到不同的行数。我的表是:

我想要 select 用户名和 (I) 用户拥有的图书数量(通过忽略状态)和 (II) 用户拥有的状态为 1 的图书数量。以及所有例如,其中 select 来自 his/her 名称中具有 "Doe" 的用户。是否可以?我怎样才能得到这些结果?

http://sqlfiddle.com/#!2/102ce8/3

示例结果:

(名称、总计数、特定计数)
无名氏,3 岁,1 岁
无名氏,2 岁,1 岁

SELECT tu.name,
       Count(ts.id),
       Sum(CASE
             WHEN status = 1 THEN 1
             ELSE 0
           END)
FROM   tblUsers tu
       INNER JOIN tblStatus ts
         ON ts.id = tu.id
WHERE  tu.name LIKE '%doe%'
GROUP  BY tu.id 

你是这个意思吗?

SELECT nom,count(b.id_user),SUM(b.status) FROM user u,booking b WHERE u.id=b.id_user GROUP BY u.id

GROUP BY 是你的朋友 ;)

此语句适用于您的 SQL Fiddle:

SELECT 
  name,count(*),SUM(b.status) 

FROM users u

  INNER JOIN books b 
  ON u.id=b.user_id

GROUP BY u.id

如果您只想查看 Doe 家族,请添加如下 WHERE 子句:

SELECT 
  name,count(*),SUM(b.status) 

FROM users u

  INNER JOIN books b 
  ON u.id=b.user_id

WHERE  u.name LIKE '%Doe%'

GROUP BY u.id

如果您想为状态列使用不同的值(例如 42 而不是 1),您应该像这样使用条件聚合计数:

SELECT 
  name,count(*),SUM(CASE
             WHEN b.status = 1 THEN 1
             ELSE 0
           END) 

FROM users u

  INNER JOIN books b 
  ON u.id=b.user_id

WHERE  u.name LIKE '%Doe%'

GROUP BY u.id