为什么不能在where子句中使用临时列?
例如,此查询:
Select
product_brand,
(CASE WHEN COUNT(product_brand)>50 THEN 1 ELSE 0 END) AS brand_count
FROM
products
WHERE
1
GROUP BY
product_brand
这将显示两列,一列称为product_brand
,另一列称为brand_count
。brand_count
是即时创建的,始终为1或0,具体取决于是否有50个或该品牌的产品。
这一切对我来说都是有意义的,除了我不能仅brand_count = 1
在以下查询中选择时:
Select
product_brand,
(CASE WHEN COUNT(product_brand)>50 THEN 1 ELSE 0 END) AS brand_count
FROM
products
WHERE
brand_count = 1
GROUP BY
product_brand
这给了我这个错误:
#1054 - Unknown column 'brand_count' in 'where clause'
使用HAVING
来代替:
Select
product_brand,
(CASE WHEN COUNT(product_brand)>50 THEN 1 ELSE 0 END) AS brand_count
FROM products
GROUP BY product_brand
HAVING brand_count = 1
WHERE
被评估 前 的GROUP BY
。HAVING
被评估之后。
问题内容: 我已经让用户在表中输入需要查询的值列表。该列表可能非常大,并且在编译时长度未知。而不是使用我在想的是,使用临时表并对其执行联接会更有效。我在另一个SO问题中阅读了此建议(目前无法找到,但在编辑时会进行编辑)。 要点是这样的: 如果我有两个同时进行,如果线程2尝试在线程1之后创建TEMP表,我不会收到错误消息吗? 我应该为TEMP表随机生成一个名称吗? 或者,如果我将整个内容包装在交易中
问题内容: 我正在尝试搜索文本和备注的多列,以查找某些我不想看到的特定短语和黑名单短语。 假设下表 前任。我想找到所有提到(在任何领域中)“苹果”但黑名单中的“苹果酱”的故事。 如何在where子句中使用别名?我找不到有关此主题的任何文档: 1)这种方法可行吗? 2)替代方法是否意味着我将在每次行迭代中执行多个字符串连接? 问题答案: 我不能在where子句中使用别名。 这种方法可行吗? 当然,将
问题内容: 在WHERE子句中有使用SELECT语句描述的名称吗?这是好/不好的做法吗? 这会是更好的选择吗? 它远没有那么优雅,但是运行起来比以前的版本要快。我不喜欢它,因为它在GUI中没有非常清晰地显示(并且SQL初学者需要理解它)。我可以将其分为两个独立的查询,但是随后事情变得混乱了…… 注意:我不仅需要日期和分数(例如姓名) 问题答案: 称为相关子查询。它有它的用途。
问题内容: 我有一个带有timestamp列的表,我想获取特定月份的时间戳记(例如,9月1日至9月30日之间的timpestamp),如果该月份为31天,则需要考虑这些值。我使用以下查询: 我可以加吗?? date_array将是整个月的日期? 问题答案: 要使其与索引一起使用,您可以执行
问题内容: 我想在Derby数据库中模拟以下类型的查询(即Microsoft SQL Server语法)的效果。目标是返回表中存储在“ someColumn”中的日期少于7天的所有记录。这是我希望实现的Microsoft SQL语法… 我已经能够确定在Derby中它将涉及使用timestampdiff函数。但是我不知道Derby中WHERE子句中函数用法的语法,因此我找不到任何示例。我发现了很多在
问题内容: 假设我有这张桌子 我想返回第一行,其中所有先前现金的总和大于某个值: 因此,例如,如果我要返回第一行,其中所有先前现金的总和都大于500,则应返回到第3行 如何使用mysql语句执行此操作? 使用 不起作用 问题答案: 您只能在HAVING子句中使用聚合进行比较: 该子句要求您定义GROUP BY子句。 要获得第一行,其中所有先前现金的总和都大于某个值,请使用: 由于聚合函数发生在子查