MYSQL查询同一个字段两个不同的id

标签 mysql sql pivot

我的MYSQL功夫很弱,需要一些指导,这是我的2个表:

TABLE SHIPS

id |  ship_name
1     recon ship
2     light fighter
3     heavy fighter
4     light cruiser

TABLE FLEET

user_id | ship_id | amt
173          1       3
173          2       4
173          3       1
173          4       0
169          1       5
169          2       2
169          3       0
169          4       0

对于我的输出,我试图获取这样的数据:

ship_name      | amt1 | amt2
recon ship        3       5
light fighter     4       2
heavy fighter     1       0

其中 amt1 是用户 173 的金额,amt2 是用户 169 的金额。我希望我已经说清楚了,谢谢!

编辑:我又添加了一艘船,并且两个用户都为该船设置了 amt=0 的情况,我怎么能从结果中忽略这种情况,我在 WHERE 子句中尝试过,但它一直告诉我我有一个错误

最佳答案

根据您的问题,这将满足您的基本需求。

SELECT  a.ship_name,
        MAX(CASE WHEN b.user_ID = 173 THEN amt END) amt1,
        MAX(CASE WHEN b.user_ID = 169 THEN amt END) amt2
FROM    Ships a
        INNER JOIN Fleet b
            ON  a.id = b.ship_ID AND
                b.user_ID IN (173, 169)
GROUP   BY a.ship_name

如果您想返回所有 user_ID 而不在语句中指定任何值,那么动态 SQL 是首选。

更新 1

添加HAVING子句,

SELECT  ...
FROM    ...
GROUP   BY ....
HAVING  MAX(CASE WHEN b.user_ID = 173 THEN amt END) <> 0 AND
        MAX(CASE WHEN b.user_ID = 169 THEN amt END) <> 0

关于MYSQL查询同一个字段两个不同的id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15985391/

相关文章:

mysql - MySQL 查询能否将时间+用户数据汇总到时间 x 用户报告中?

php - PHP/MySQL 脚本执行速度慢

php - 安全地存储从Docker容器访问的MySQL凭据

sql - 如何使用一个 SQL 查询从数据库中删除所有表?

mysql - 未知排序规则 1273 错误 MySQL

mysql - 如何将 varchar 转换/转换为日期?

java - 查看MySQL数据库内容

sql - mysql 在 IF() 上加入?

r - 根据列的值用 0 或 1 转置、展开或旋转表

python - 通过更改 'Values' 参数生成透视 Pandas 数据帧