mysql - 转置输出范围的 MySQL 查询的结果

标签 mysql wordpress

我的源表 (wplott_wpkl_winner) 包含字段“lottery_number”,其中包含 1 到 6 位数字和相应的“draw_date”。

    lottery_number | draw_date
==================================
    0024           | 2018-11-10
    4456           | 2018-11-10
    3895           | 2018-11-10
    4557           | 2018-11-10
    4225           | 2018-11-10
    2896           | 2018-11-10
    3354           | 2018-11-10
    1895           | 2018-11-10
    78466          | 2018-11-10
    998556         | 2018-11-10

我当前的 MYSQL 查询如下(我试图将数据分组到范围内)

select
        count(case when wplott_wpkl_winner.lottery_number between 0 and 999 then 1 end) `0-999`,
        count(case when wplott_wpkl_winner.lottery_number between 1000 and 1999 then 1 end) `1000-1999`,
        count(case when wplott_wpkl_winner.lottery_number between 2000 and 2999 then 1 end) `2000-2999`,
        count(case when wplott_wpkl_winner.lottery_number between 3000 and 3999 then 1 end) `3000-3999`,
        count(case when wplott_wpkl_winner.lottery_number between 4000 and 4999 then 1 end) `4000-4999`,
        count(case when wplott_wpkl_winner.lottery_number between 5000 and 5999 then 1 end) `5000-5999`,
        count(case when wplott_wpkl_winner.lottery_number between 6000 and 6999 then 1 end) `6000-6999`,
        count(case when wplott_wpkl_winner.lottery_number between 7000 and 7999 then 1 end) `7000-7999`,
        count(case when wplott_wpkl_winner.lottery_number between 8000 and 8999 then 1 end) `8000-8999`,
        count(case when wplott_wpkl_winner.lottery_number between 9000 and 9999 then 1 end) `9000-9999`
    from wplott_wpkl_winner
    where CHAR_LENGTH(wplott_wpkl_winner.lottery_number) = 4 AND wplott_wpkl_winner.draw_date > '2013-06-30'

它提供以下输出

    0-999 | 1000-1999 | 2000-2999 | 3000-3999 | 4000- 4999 .... etc
=====================================================================
    1     | 1         | 1         | 2         | 3

但是,我想获得以下格式的输出。

    Range     | Count
=======================
    0-999     | 1
    1000-1999 | 1
    2000-2999 | 1
    3000-3999 | 2
    4000-4999 | 3
    .
    .
    .

非常感谢任何帮助。我确实在 SO 中搜索了类似的答案,但没有一个答案对我的特殊情况有帮助。

提前致谢!

最佳答案

一种方法使用一系列联合:

SELECT
    `range`,
    count
FROM
(
    SELECT 1 AS pos, '0-999' AS `range`, COUNT(*) AS count
    FROM wplott_wpkl_winner
    WHERE draw_date > '2013-06-30' AND lottery_number BETWEEN 0 AND 999
    UNION ALL
    SELECT 2, '1000-1999', COUNT(*)
    FROM wplott_wpkl_winner
    WHERE draw_date > '2013-06-30' AND lottery_number BETWEEN 1000 AND 1999
    UNION ALL
    ...      -- fill in remaining ranges here
) t
ORDER BY pos;

请注意,我引入了一个计算列 pos,以便我们可以在最终输出中保持所需的范围顺序。此外,我删除了对 lottery_numberCHAR_LENGTH 的检查,因为条件和已经处理了这个逻辑。

关于mysql - 转置输出范围的 MySQL 查询的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53239437/

相关文章:

database - 如何从数据库中删除 WordPress 用户

php - MySql if 语句不起作用

php - 使用 PDO、准备好的语句和用 bindParam 替换标记来更新 MySQL;收到 'variables don' t 匹配 token 错误

wordpress - 尝试使用 htaccess 重定向站点时出现 "Too many redirects"

mysql - 如何使用 MySQL 查询在 WordPress 的特定类别中选择最新的 3 篇文章?

jQuery(document).ready(function(){ 在淡入淡出之前不等待背景图像先加载

mysql - 在sql脚本中使用变量?

php - 使用 foreach 将元素数组放在正确的标题下

mysql - 这段SQL代码在添加PRIMARY KEY索引的解释

php - Wordpress 插件中的 is_admin() 和 DOING_AJAX