mysql - 尝试使用 CASE 过滤查询结果

标签 mysql sql group-by pivot aggregate-functions

我有 2 个 WP 表,第一个是标准用户表,第二个是额外字段插件。第二张表由具有字段 user_id、field_id 和 value 的类型构成

我构建了以下查询以从第二个表中提取数据,但无法确定如何根据“州”字段过滤结果。

放入一行 WHERE State = 'SA' 只会抛出错误代码:1054。'where 子句'中的未知列 'State' 尝试将 'IF' 语句添加到 CASE 行不起作用...有人有任何想法吗?

SELECT
        `wpty_users`.`user_login` AS `user_login`,
        `wpty_users`.`display_name` AS `display_name`,
        MIN(CASE WHEN `wpty_cimy_uef_data`.`FIELD_ID` = 8 THEN `wpty_cimy_uef_data`.`VALUE` ELSE NULL END) AS `Club`,
        MIN(CASE WHEN `wpty_cimy_uef_data`.`FIELD_ID` = 9 THEN `wpty_cimy_uef_data`.`VALUE` ELSE NULL END) AS `State`
 FROM
        `wpty_users`
        LEFT JOIN `wpty_cimy_uef_data` ON `wpty_users`.`ID` = `wpty_cimy_uef_data`.`USER_ID`
    GROUP BY `wpty_cimy_uef_data`.`USER_ID`
    ORDER BY `wpty_users`.`user_login`

最佳答案

您可以包装您的查询:

SELECT *
FROM (
    SELECT
        `wpty_users`.`user_login` AS `user_login`,
        `wpty_users`.`display_name` AS `display_name`,
        MIN(CASE WHEN `wpty_cimy_uef_data`.`FIELD_ID` = 8 THEN `wpty_cimy_uef_data`.`VALUE` ELSE NULL END) AS `Club`,
        MIN(CASE WHEN `wpty_cimy_uef_data`.`FIELD_ID` = 9 THEN `wpty_cimy_uef_data`.`VALUE` ELSE NULL END) AS `State`
     FROM
        `wpty_users`
        LEFT JOIN `wpty_cimy_uef_data` ON `wpty_users`.`ID` = `wpty_cimy_uef_data`.`USER_ID`
    GROUP BY `wpty_cimy_uef_data`.`USER_ID`
    ORDER BY `wpty_users`.`user_login`
) x
WHERE `State` = 'SA'

或者更好的是,您可以在 HAVING 子句中使用列别名(就目前而言,这在 MySQL 中受支持):

SELECT
    `wpty_users`.`user_login` AS `user_login`,
    `wpty_users`.`display_name` AS `display_name`,
    MIN(CASE WHEN `wpty_cimy_uef_data`.`FIELD_ID` = 8 THEN `wpty_cimy_uef_data`.`VALUE` ELSE NULL END) AS `Club`,
    MIN(CASE WHEN `wpty_cimy_uef_data`.`FIELD_ID` = 9 THEN `wpty_cimy_uef_data`.`VALUE` ELSE NULL END) AS `State`
 FROM
    `wpty_users`
    LEFT JOIN `wpty_cimy_uef_data` ON `wpty_users`.`ID` = `wpty_cimy_uef_data`.`USER_ID`
GROUP BY `wpty_cimy_uef_data`.`USER_ID`
HAVING `State` = 'SA'
ORDER BY `wpty_users`.`user_login`

关于mysql - 尝试使用 CASE 过滤查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58513360/

相关文章:

php - 如何获得单行 CodeIgniter

php - 如何使用android studio将带有字符串数据的图像上传到mysql服务器

sql - 棘手的选择语句

R dplyr 的 group_by 也考虑空组

Perl 中的 Mysql 查询参数问题

javascript - 通过获取对象的总和来减少 SQL 查询结果

mysql - 如何对另一列的 DISTINCT 值和 GROUP BY 日期求和?

c# - 更新大型SQLite数据库

sql - 比较sql中组内的列

python - 在 Python Polars 中获取每个 groupby/apply 的相关性