【问题标题】:Percentage in a single SQL query单个 SQL 查询中的百分比
【发布时间】:2011-01-08 13:43:44
【问题描述】:

我目前有两个几乎相同的 SQL 查询,用于我的 SQLITE3 数据库。

查找匹配记录的总数。

SELECT COUNT(runner.id)
FROM entry
JOIN runner ON runner.entry_id = entry.id
JOIN race ON race.id = entry.race_id
JOIN horse ON horse.id = entry.horse_id
WHERE STRFTIME('%Y-%m-%d', race.datetime) < :max_date AND
STRFTIME('%Y-%m-%d', race.datetime) >= :min_date AND
entry.trainer_id = :trainer_id AND
race.course_id = :course_id AND
race.type = :race_type

查找 x = y 的匹配记录总数。

SELECT COUNT(runner.id)
FROM entry
JOIN runner ON runner.entry_id = entry.id
JOIN race ON race.id = entry.race_id
JOIN horse ON horse.id = entry.horse_id
WHERE STRFTIME('%Y-%m-%d', race.datetime) < :max_date AND
STRFTIME('%Y-%m-%d', race.datetime) >= :min_date AND
entry.trainer_id = :trainer_id AND
race.course_id = :course_id AND
runner.position = 1 AND
race.type = :race_type

然后我计算 PHP 代码中 x = y 记录的百分比。如何从单个 SQL 查询中返回百分比?

编辑:关于优化,我刚刚将 WHERE 条件转换为更合理的顺序,并添加了一些索引,它从 17 秒下降到 0.1 秒。

【问题讨论】:

    标签: php sql sqlite


    【解决方案1】:

    运行您的第一个查询并将选择更改为:

    SUM(CASE WHEN runner.position = 1 THEN 1 ELSE 0 END) as position1Count, COUNT(runner.id) as total
    

    然后将 postionCount 除以 PHP 中的总数。

    【讨论】:

    • 完美 :) 并查询到 0.5 秒。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 2012-02-18
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多