简体   繁体   English

如何在sqlite计算字段中返回小数

[英]How to return decimal numbers in sqlite calculated field

I have the following query: 我有以下查询:

SELECT
    qryFoodInCases.fldCaseID,
    qryFoodInCases.fldFood,
    AteAttackRate,
    NotAteAttackRate,
    Round( AteAttackRate / NotAteAttackRate, 2 ) RelativeRisk
FROM
    qryFoodInCases
    LEFT JOIN
    (
        SELECT
            qryNotAteInCase.fldCaseID,
            qryNotAteInCase.fldFood,
            COALESCE( qryNotAteAndGotSick.NotAteAndGotSick, 0 ) NotAteAndGotSick,
            qryNotAteInCase.NotAteInCase
            TotalNotAte,
            100 * COALESCE( qryNotAteAndGotSick.NotAteAndGotSick, 0 ) / qryNotAteInCase.NotAteInCase NotAteAttackRate
        FROM
            qryNotAteInCase
            LEFT JOIN qryNotAteAndGotSick ON qryNotAteInCase.fldFood = qryNotAteAndGotSick.fldFood
        GROUP  BY qryNotAteInCase.fldFood
    ) QA
        ON qryFoodInCases.fldFood = QA.fldFood

    LEFT JOIN
    (
        SELECT
            qryFoodInCases.fldCaseID,
            qryFoodInCases.fldFood,
            COALESCE( qryAteAndGotSick.AteAndGotSick, 0) AteAndGotSick,
            qryFoodInCases.fldFoodFrequency TotalAte,
            100 * COALESCE( qryAteAndGotSick.AteAndGotSick, 0 ) / qryFoodInCases.fldFoodFrequency AteAttackRate
        FROM
            qryFoodInCases
            LEFT JOIN qryAteAndGotSick ON qryFoodInCases.fldFood = qryAteAndGotSick.fldFood
        GROUP BY
            qryFoodInCases.fldFood
    ) QN
        ON qryFoodInCases.fldFood = QN.fldFood

GROUP BY
    qryFoodInCases.fldFood
ORDER BY
    AteAttackRate DESC,
    NotAteAttackRate 

NB: Only the last field of the select statement is relevant to this question: 注意:仅select语句的最后一个字段与此问题有关:

 round(AteAttackRate/NotAteAttackRate,2) RelativeRisk

That return the following records 返回以下记录

+-----------+------------+---------------+------------------+--------------+
| fldCaseID |  fldFood   | AteAttackRate | NotAteAttackRate | RelativeRisk |
+-----------+------------+---------------+------------------+--------------+
|         1 | Beans      |           100 |               33 |            3 |
|         1 | Cabagge    |            66 |               75 |            0 |
|         1 | fried fish |            66 |               75 |            0 |
|         1 | Banana     |            50 |               80 |            0 |
|         1 | Pork       |            50 |              100 |            0 |
|         1 | Chicken    |            33 |              100 |            0 |
|         1 | Potatoes   |             0 |              100 |            0 |
|         1 | Rice       |             0 |              100 |            0 |
+-----------+------------+---------------+------------------+--------------+

What do I need to do to get the decimal values of the field RelativeRisk 我需要怎么做才能获取字段RelativeRisk的十进制值

Try: 尝试:

select 
    ... 
    round(AteAttackRate/cast(NotAteAttackRate as float),2) RelativeRisk
    ... 

Both AteAttackRate and NotAteAttackRate are integers, so AteAttackRate / NotAteAttackRate is integer too, and round(AteAttackRate / NotAteAttackRate, 2) changes nothing. AteAttackRateNotAteAttackRate都是整数,因此AteAttackRate / NotAteAttackRate也是整数,并且round(AteAttackRate / NotAteAttackRate, 2)不变。 You have to explicitly cast to float at least one of the numbers to obtain a float quotient. 您必须显式强制转换为至少浮点数之一以获得浮点商。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM