如何用条件WHERE计算表中的行?

时间:2014-12-21 11:19:34

标签: mysql sql

有一个查询来计算表question_category中的行:

SELECT
          idSpecialization,
          thematicspecialization.SpecializationName AS SpecializationName,
          SubscrubeToUsersIdNote,
          COUNT(question_categoryId) AS CNT,
          COUNT(idSubscrubeToUsers) AS SUBS
          FROM thematicspecialization
          LEFT JOIN question_category ON question_category.question_categoryIdCategory = thematicspecialization.idSpecialization
          LEFT JOIN question a ON a.idQuestion = question_category.question_categoryIdQuestion
          LEFT JOIN subscrubetousers ON (subscrubetousers.SubscrubeToUsersIdNote = idSpecialization AND subscrubetousers.SubscrubeToUsersType = 4 AND SubscrubeToUsersStatus = 1)

WHERE a.country = 1
GROUP BY idSpecialization

需要显示thematicspecialization的类别名称,条件为WHERE a.country = 1才能加入表question a ON a.idQuestion = question_category.question_categoryIdQuestion

在我的情况下 - 不显示类别。

2 个答案:

答案 0 :(得分:0)

不清楚。 但我想。您有一个像

这样的条件的联接
subscrubetousers.SubscrubeToUsersIdNote = idSpecialization AND subscrubetousers.SubscrubeToUsersType = 4 AND SubscrubeToUsersStatus = 1be this 

可能是这种情况发生冲突thematicspecialization字段

答案 1 :(得分:0)

这对于一个人来说太长了。

这是您的查询,修改了一下以使用表别名,因此更容易阅读:

SELECT ts.idSpecialization, ts.SpecializationName, sts.SubscrubeToUsersIdNote,
       COUNT(question_categoryId) AS CNT,
       COUNT(idSubscrubeToUsers) AS SUBS
FROM thematicspecialization ts LEFT JOIn
     question_category qc
     ON qc.question_categoryIdCategory = ts.idSpecialization LEFT JOIN
     question q
     ON q.idQuestion = qc.question_categoryIdQuestion LEFT JOIN
     subscrubetousers sts
     ON (sts.SubscrubeToUsersIdNote = ts.idSpecialization AND
         sts.SubscrubeToUsersType = 4 AND
         sts.SubscrubeToUsersStatus = 1)
WHERE q.country = 1
GROUP BY idSpecialization;

以下是我注意到的事情:

  1. tsqc之间的联接位于IdCategoryidSpecialization。这似乎是一个奇怪的名字组合。
  2. ststs之间的联接部分位于SubscrubeToUsersIdNoteidSpecialization。这似乎是一个奇怪的名字组合。
  3. where条件正在将某些left join转换为内部联接 - 无论如何都要问{1}}为什么要这样做。
  4. 两个left join列将返回非常相似的数字,因为它们在count个键上计算非NULL值。
  5. 您的问题是"类别"和他们的名字"。但是,根据您的查询,完全不清楚这些字段是指哪些字段。
  6. 基于此查询,我不知道您真正想要做什么。你应该写另一个问题,用样本数据和所需的输出来表达你想要做的事情。这个问题已有两个答案。澄清它以便理解将(可能)使答案无效,这是不礼貌的。