Mysql 如何在条件为WHERE的情况下计算表中的行数?
有一个查询用于从表问题\类别中计算行数: 需要显示主题专业化的类别名称,条件是a.country=1以连接表a上的问题a.idQuestion=question\u category.question\u categoryIdQuestion 在我的情况下-不显示类别。不清楚。 但我猜。你有一个连接条件,比如Mysql 如何在条件为WHERE的情况下计算表中的行数?,mysql,sql,Mysql,Sql,有一个查询用于从表问题\类别中计算行数: 需要显示主题专业化的类别名称,条件是a.country=1以连接表a上的问题a.idQuestion=question\u category.question\u categoryIdQuestion 在我的情况下-不显示类别。不清楚。 但我猜。你有一个连接条件,比如 subscrubetousers.SubscrubeToUsersIdNote = idSpecialization AND subscrubetousers.SubscrubeToUse
subscrubetousers.SubscrubeToUsersIdNote = idSpecialization AND subscrubetousers.SubscrubeToUsersType = 4 AND SubscrubeToUsersStatus = 1be this
可能是此条件与特定字段冲突这对于一次提示来说太长了 这是您的查询,修复了一些使用表别名的问题,因此更易于阅读:
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;
我注意到以下几点:
ts和qc之间的连接基于IdCategory和idSpecialization。这似乎是一个奇怪的名字组合。
sts和ts之间的连接部分取决于SubCrubeTousersidNote和idSpecialization。这似乎是一个奇怪的名字组合。
where条件是将一些左连接转换为内部连接,这让人质疑为什么要使用左连接。
这两个count列将返回非常相似的数字,因为它们对连接键“”上的非NULL值进行计数。
你的问题是关于类别及其名称。然而,根据您的查询,完全不清楚这些字段指的是什么。
基于这个问题,我不知道你真正想做什么。您可能应该写另一个问题,用示例数据和期望的输出来表示您正在尝试做什么。这个问题已经有了两个答案。澄清它以便理解可能会使答案无效,这是不礼貌的。不显示类别是什么意思?如果查询类别计数,则不应显示类别本身;GROUPBY查询返回它们的计数,而不显示单个类别。
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;