mysql - 在不引用别名但使用 SUM(CASE) 的情况下过滤 MySQL 输出
问题描述
为了修复我们的数据库中丢失的用户 ID,我正在尝试查看在同一个表中找到有和没有 ID 的同一个用户的实例。到目前为止,我使用以下方法得到了粗略的结果:
SELECT users,
SUM(CASE WHEN UserID = "" THEN 1 ELSE 0 END) as InstancesWithoutIDs,
SUM(CASE WHEN UserID <> "" THEN 1 ELSE 0 END) as InstancesWithIDs,
COUNT(*) as TOTAL
FROM table.users
GROUP BY name;
我现在想要一个where InstancesWithIDs > 0
应用于表格的过滤器。但是当我继续阅读时,我无法在过滤器中引用别名。通过谷歌搜索,我认为我得到的最好的是:
SELECT * from (
SELECT users,
SUM(CASE WHEN UserID = "" THEN 1 ELSE 0 END) as InstancesWithoutIDs,
SUM(CASE WHEN UserID <> "" THEN 1 ELSE 0 END) as InstancesWithIDs,
COUNT(*) as TOTAL
FROM table.users) A
where InstancesWithIDs > 0;
但这会将所有结果显示为一条记录。
users || InstancesWithoutIDs || InstancesWithIDs
A. Fisher 62588 947711
我怎样才能显示完整的表格,就像我对顶部查询所做的那样?
非常感谢任何帮助!
解决方案
您可以像这样使用拥有(仅当您使用 GROUP BY 时):
SELECT users,
SUM(CASE WHEN UserID = "" THEN 1 ELSE 0 END) as InstancesWithoutIDs,
SUM(CASE WHEN UserID <> "" THEN 1 ELSE 0 END) as InstancesWithIDs,
COUNT(*) as TOTAL
FROM table.users
GROUP BY name
HAVING InstancesWithIDs > 0;
HAVING 将等同于 WHERE 但对于聚合函数
推荐阅读
- wordpress - 更改联系表 7 默认时间格式
- c# - 外部 dll SEHException ntdll 崩溃
- mysql - 计算mysql数据表中有多少行和列
- jquery - Cheerio NPM 试图在 nodeJS 中获取 img src 的值
- bash - 使用带有 -e 的相同 grep 命令的不同输出
- ios - 旋转设备时保持按钮在同一位置
- angular - 尽管我在订阅函数中为其分配了一个值,但变量已更改为默认值
- android - Meteor raix:android 8.0.0 的推送通知 channelId
- opengl - 根据软件渲染器生成的 2D 视觉填充深度缓冲区
- javascript - 如何在 div 上使用“keydown”事件侦听器?