mysql - 为什么条件where不起作用?

标签 mysql

SELECT
    t1.user_id,
    count(*) total,
    sum(case when t1.var1 = 'yes' then 1 else 0 end) as type1,
    sum(case when t1.var1 = 'no' then 1 else 0 end) as type2
FROM table as t1
WHERE type1 > 0
GROUP by t1.user_id
ORDER by type1 DESC
LIMIT 100

结果我得到行:

user_id  total  type1  type2
  1       100    80     20
  4       120    70     50
  6       90     0      90

请告诉我为什么条件 WHERE type1 > 0 不起作用以及如何选择具有此条件的行?

最佳答案

WHERE 仅适用于原始值,不适用于您刚刚通过汇总其他值而生成的变量,您可以使用 HAVING 来实现此目的:

SELECT
t1.user_id,
count(*) total,
sum(case when t1.var1 = 'yes' then 1 else 0 end) as type1,
sum(case when t1.var1 = 'no' then 1 else 0 end) as type2
FROM table as t1
GROUP by t1.user_id
HAVING type1 > 0
ORDER by type1 DESC
LIMIT 100

请参阅此处使用 HAVING 的另一个示例:http://www.w3schools.com/sql/sql_having.asp

关于mysql - 为什么条件where不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36370852/

相关文章:

php - 带有幽灵数据的 MySQL 数据库?

php - 在php foreach循环中获取$_POST名称和值以构建长字符串

mysql - 如何知道 MySql 的条件 INSERT 是否有效?

mysql - 如何通过ADODB读取2个表

php - 如何以表格格式显示数据

mysql - 从 SKU 获取永久链接

sql查询 friend 的 friend

php - 在另一个查询中进行查询,如果另一个查询不存在则返回 0 并比较 2 个查询之间的值

java - 尝试从 JList 中删除项目时出现逻辑错误

mysql - 如何在 MySQL 中使用 SELECT 删除填充的 NULL 字节