【问题标题】:COUNT query with mysql with condition from one field from table使用 mysql 进行 COUNT 查询,条件来自表中的一个字段
【发布时间】:2014-04-30 21:19:19
【问题描述】:

假设我有下表:

字段1 |字段2 |字段3

----3--------5--------6

----8--------5--------3

----2--------4--------8

我想做的是 COUNT(*) FROM table WHERE field3 = 6 AND... field2 与 field2 from the row where field3 = 6 (在这种情况下,'5')。这可能吗?

在这个范围内,计数的结果将是 2

【问题讨论】:

  • 考虑提供适当的 DDL(和/或 sqlfiddle)以及所需的结果集
  • @Strawberry 您必须先阅读它才能了解问题的实质。如果这还不够清楚,:]
  • @ChrisWesseling 几乎从来没有。
  • 根据您那里的表格,结果将是 1,而不是 2。只有一行 field3 = 6 和 field2 = 5。
  • 一个。你错了。湾。你没有做任何事来讨好这里的任何人,而且以你的态度,未来人们不太可能想要帮助你。

标签: mysql


【解决方案1】:

是的,这是可能的。您几乎可以将问题陈述直接转化为查询:

select count(*)
from table t
where field3 = 6 and
      field2 in (select field2 from table2 where field3 = 6);

注意在where 子句中使用in 而不是=。这考虑了子查询中有多个匹配项的情况。

编辑:

这是另一个更令人困惑的查询,它做同样的事情:

select count(field3 = 6)
from table t
group by field2
having max(field3 = 6) > 0;

我将把它留作思考它的工作原理。

【讨论】:

  • HAVING 真的 is 你最喜欢的子句不是吗? ;-)
  • @ChrisWesseling 。 . .具有讽刺意味的是,在我对 SQL 事物的分类中,havingselect distinctright outer joinavgfrom 子句中的逗号一起属于“不需要”的类别(嗯,后者是邪恶的)。它可以用子查询和where 完美表达,只是某些查询引擎使这变得困难。
  • 你从哪里得到field3 = 3,OP 有 field3 = 6... 这使得 AND 的右操作数中的 in 子选择成为重言式,因此它可以被消除。
猜你喜欢
  • 1970-01-01
  • 2013-10-03
  • 1970-01-01
  • 2018-06-07
  • 2022-12-13
  • 2013-03-06
  • 2013-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多