如何使用变量表修复“子查询返回多于1行”

时间:2019-04-02 05:35:30

标签: mysql

我有一个RAW_SCORES表,其中包含许多作业/考试成绩。 RAW_SCORES中有一行,其中包含每个作业的最高分。

('6410', 'Rivera',  'Rhonda',  '315', 64,  64, 28, 85,   98, 152),
('0001', 'MAX', 'POINTS',      '415', 100, 80, 32, 100, 120, 200),

我想创建一个过程,为每个作业打印带有(原始分数/最大分数)的表格。因此,对于作业1:

SET hw1M = (SELECT HW1 FROM RAW_SCORES WHERE (SSN = '0001'));
SELECT RAW_SCORES.SSN,
    RAW_SCORES.FName,
    RAW_SCORES.LName,
    ROUND(RAW_SCORES.HW1 / hw1M, 2)
FROM RAW_SCORES WHERE NOT (RAW_SCORES.SSN = '0001' OR RAW_SCORES.SSN = '0002');

为我提供了HW1的正确结果,但是表头显示Round(bla bla bla),问题是希望将其打印为HW1Pct。所以我尝试了:

SET hw1M = (SELECT HW1 FROM RAW_SCORES WHERE (SSN = '0001'));
SET HW1Pct = (SELECT ROUND(RAW_SCORES.HW1 / hw1M, 2) FROM RAW_SCORES WHERE hw1M IN (SELECT HW1 FROM RAW_SCORES WHERE (SSN = '0001')));
SELECT RAW_SCORES.SSN,
    RAW_SCORES.FName,
    RAW_SCORES.LName,
    HW1Pct
FROM RAW_SCORES WHERE NOT (RAW_SCORES.SSN = '0001' OR RAW_SCORES.SSN = '0002');

但这给了我Subquery returns more than 1 row错误。对该错误的其他大多数答案都是JOIN语句,但是我不确定在我的情况下如何实现。任何帮助表示赞赏。抱歉,这是一个愚蠢的问题。

1 个答案:

答案 0 :(得分:1)

只需在原始查询中添加列别名:

ROUND(RAW_SCORES.HW1 / hw1M, 2) AS HW1Pct

请参见manual