【问题标题】:MySQL Round & Sub-QueriesMySQL 循环和子查询
【发布时间】:2014-01-14 09:42:55
【问题描述】:

我在创建临时表时遇到了 round 函数的问题。 (好吧,我认为这就是问题所在)

下面列表中的“EntryGauge”列需要根据数据库中的另一个值(不同的表)进行缩放和舍入。

我认为有 2 个查询可以用作子查询来检索比例因子和舍入精度值。当我尝试使用它们时(如下面的查询所示)出现此错误:

“SQL 错误 (1166): 列名不正确 'ROUND(EntryGauge * (SELECT DisplayScaleFactor FROM webreportparametersetup WHERE MachineIdent = 'Mac'”

我不确定问题是什么,或者我是否正确使用了子查询,但我真的可以使用一些帮助!

DROP TEMPORARY TABLE IF EXISTS LiveFeed;
CREATE TEMPORARY TABLE LiveFeed AS
(
SELECT 
    MachineIdent, 
    CoilID, 
    DATE_FORMAT(StartTime, '%b %d %Y %h:%i %p'), 
    DATE_FORMAT(EndTime, '%b %d %Y %h:%i %p'), 
    TIMEDIFF(EndTime, StartTime), 
    Alloy,
    ROUND(EntryGauge * (SELECT DisplayScaleFactor FROM webreportparametersetup WHERE MachineIdent = 'MachineIdent' AND ItemName = 'EntryGauge'), (SELECT DisplayPrecision FROM webreportparametersetup WHERE MachineIdent = 'MachineIdent' AND ItemName = 'EntryGauge')), 
    ExitGauge, 
    EntryWidth, 
    ExitWidth, 
    CoilDiameter, 
    CoilLength 
FROM Coil 
    INNER JOIN CoilPass 
    ON Coil.CoilIdent=CoilPass.CoilIdent 
    INNER JOIN PassSection
    ON CoilPass.PassIdent=PassSection.PassIdent 
WHERE PassSection.SectionIdent IN('7965','7966','7967')
);

编辑:只是为了清楚计算需要是什么样子:

Round(EntryGauge * ScaleFactor, RoundingPrecision)

【问题讨论】:

  • 1.这些列是否真的存在? 2.尝试使用后命名列。 ROUND(EntryGauge * (SELECT DisplayScaleFactor FROM webreportparametersetup WHERE MachineIdent = 'MachineIdent' AND ItemName = 'EntryGauge'), (SELECT DisplayPrecision FROM webreportparametersetup WHERE MachineIdent = 'MachineIdent' AND ItemName = 'EntryGauge')) AS EntryGagesRounded,
  • 能否在 ROUND 函数中单独运行子查询,以确认它们是否正确?
  • 谢谢,解决了主要问题!

标签: mysql


【解决方案1】:

也许您只是忘记给圆角列命名? Join 为您提供了更好的概览:

DROP TEMPORARY TABLE IF EXISTS LiveFeed;
CREATE TEMPORARY TABLE LiveFeed AS
(
SELECT 
    MachineIdent, 
    CoilID, 
    DATE_FORMAT(StartTime, '%b %d %Y %h:%i %p'), 
    DATE_FORMAT(EndTime, '%b %d %Y %h:%i %p'), 
    TIMEDIFF(EndTime, StartTime), 
    Alloy,
    ROUND(EntryGauge * webreportparametersetup.DisplayScaleFactor,webreportparametersetup.DisplayPrecision) as RoundedValue, 
    ExitGauge, 
    EntryWidth, 
    ExitWidth, 
    CoilDiameter, 
    CoilLength 
FROM Coil 
    INNER JOIN CoilPass 
    ON Coil.CoilIdent=CoilPass.CoilIdent 
    INNER JOIN PassSection
    ON CoilPass.PassIdent=PassSection.PassIdent
    LEFT JOIN webreportparametersetup
    ON MachineIdent = 'MachineIdent' AND ItemName = 'EntryGauge'
WHERE PassSection.SectionIdent IN('7965','7966','7967')
);

【讨论】:

  • 谢谢!解决了主要问题。我只是想知道,在我引用 MachineIdent 的部分(在左连接中)是否有某种语法可以使用当前检索的记录?有点像 MachineIdent = @MachineIdent? (比例因子等基于“机器相关”。)
【解决方案2】:

请试试这个:

ROUND(EntryGauge * (SELECT DisplayScaleFactor 
FROM webreportparametersetup WHERE MachineIdent = 'MachineIdent' 
AND ItemName = 'EntryGauge'),2), ROUND((SELECT DisplayPrecision 
FROM webreportparametersetup WHERE MachineIdent = 'MachineIdent' 
AND ItemName = 'EntryGauge'),2)

我认为是括号的问题

【讨论】:

  • 感谢您的回复,但是 Rounding Calc 需要采用这种格式:Round(EntryGauge * ScaleFactor, RoundingPrecision) 所以第二个子查询需要去你的地方将“2”放在圆形函数中,因为它代表那个数字。
猜你喜欢
  • 1970-01-01
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
  • 2015-02-15
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多