You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle Apex 23ai中如何为最大值柱状图设置不同颜色

Oracle Apex 23ai 柱状图最大值柱子着色方案

我正在Oracle Apex 23ai中创建柱状图,需要为具有最大值的行对应的柱子更改颜色。我的标签字段是X_LABEL,数值字段是Y_VALUE,X_VAL用于按波兰语星期名称对柱子排序。

已实现的固定文本着色示例

我已经在另一图表中实现了根据X_LABEL文本值为柱子设置不同颜色,SQL代码如下:

SELECT A.*,
    case X_LABEL 
        when 'DZIEŃ WOLNY' THEN '#5F7D4F'
        WHEN 'DZIEŃ PRACUJĄCY' THEN '#CA4D3C'
    end bar_colour 
FROM (
    SELECT 'DZIEŃ PRACUJĄCY' AS X_LABEL, COUNT(WORKING_DAY) AS Y_VALUE FROM HEADACHE_RECORDS WHERE WORKING_DAY = 1
    UNION
    SELECT 'DZIEŃ WOLNY' AS X_LABEL, COUNT(WORKING_DAY) AS Y_VALUE FROM HEADACHE_RECORDS WHERE WORKING_DAY = 0
) A

当前需求:标记最大值柱子

现在创建的图表需要标记出所有具有最大值的柱子(可能存在多个柱子同为最大值的情况),当前使用的SQL查询如下:

SELECT
    A.*
FROM (
    SELECT 'PONIEDZIAŁEK' AS X_LABEL, 1 AS X_VAL, COUNT(HEADACHE_DATE) AS Y_VALUE FROM HEADACHE_RECORDS WHERE TO_CHAR(HEADACHE_DATE, 'D') = 1 AND HEADACHE_TYPE IS NOT NULL
    UNION
    SELECT 'WTOREK' AS X_LABEL, 2 AS X_VAL, COUNT(HEADACHE_DATE) AS Y_VALUE FROM HEADACHE_RECORDS WHERE TO_CHAR(HEADACHE_DATE, 'D') = 2 AND HEADACHE_TYPE IS NOT NULL
    UNION
    SELECT 'ŚRODA' AS X_LABEL, 3 AS X_VAL, COUNT(HEADACHE_DATE) AS Y_VALUE FROM HEADACHE_RECORDS WHERE TO_CHAR(HEADACHE_DATE, 'D') = 3 AND HEADACHE_TYPE IS NOT NULL
    UNION
    SELECT 'CZWARTEK' AS X_LABEL, 4 AS X_VAL, COUNT(HEADACHE_DATE) AS Y_VALUE FROM HEADACHE_RECORDS WHERE TO_CHAR(HEADACHE_DATE, 'D') = 4 AND HEADACHE_TYPE IS NOT NULL
    UNION
    SELECT 'PIĄTEK' AS X_LABEL, 5 AS X_VAL, COUNT(HEADACHE_DATE) AS Y_VALUE FROM HEADACHE_RECORDS WHERE TO_CHAR(HEADACHE_DATE, 'D') = 5 AND HEADACHE_TYPE IS NOT NULL
    UNION
    SELECT 'SOBOTA' AS X_LABEL, 6 AS X_VAL, COUNT(HEADACHE_DATE) AS Y_VALUE FROM HEADACHE_RECORDS WHERE TO_CHAR(HEADACHE_DATE, 'D') = 6 AND HEADACHE_TYPE IS NOT NULL
    UNION
    SELECT 'NIEDZIELA' AS X_LABEL, 7 AS X_VAL, COUNT(HEADACHE_DATE) AS Y_VALUE FROM HEADACHE_RECORDS WHERE TO_CHAR(HEADACHE_DATE, 'D') = 7 AND HEADACHE_TYPE IS NOT NULL
    ORDER BY X_VAL
) A

解决方案:动态标记最大值柱子

通过子查询获取Y_VALUE的最大值,再用CASE语句为等于最大值的行设置特殊颜色,其余行使用默认颜色。以下提供两种实现方式:

方式1:基于原有查询修改

SELECT
    A.*,
    CASE WHEN A.Y_VALUE = (SELECT MAX(Y_VALUE) FROM (
        SELECT COUNT(HEADACHE_DATE) AS Y_VALUE FROM HEADACHE_RECORDS WHERE TO_CHAR(HEADACHE_DATE, 'D') = 1 AND HEADACHE_TYPE IS NOT NULL
        UNION
        SELECT COUNT(HEADACHE_DATE) AS Y_VALUE FROM HEADACHE_RECORDS WHERE TO_CHAR(HEADACHE_DATE, 'D') = 2 AND HEADACHE_TYPE IS NOT NULL
        UNION
        SELECT COUNT(HEADACHE_DATE) AS Y_VALUE FROM HEADACHE_RECORDS WHERE TO_CHAR(HEADACHE_DATE, 'D') = 3 AND HEADACHE_TYPE IS NOT NULL
        UNION
        SELECT COUNT(HEADACHE_DATE) AS Y_VALUE FROM HEADACHE_RECORDS WHERE TO_CHAR(HEADACHE_DATE, 'D') = 4 AND HEADACHE_TYPE IS NOT NULL
        UNION
        SELECT COUNT(HEADACHE_DATE) AS Y_VALUE FROM HEADACHE_RECORDS WHERE TO_CHAR(HEADACHE_DATE, 'D') = 5 AND HEADACHE_TYPE IS NOT NULL
        UNION
        SELECT COUNT(HEADACHE_DATE) AS Y_VALUE FROM HEADACHE_RECORDS WHERE TO_CHAR(HEADACHE_DATE, 'D') = 6 AND HEADACHE_TYPE IS NOT NULL
        UNION
        SELECT COUNT(HEADACHE_DATE) AS Y_VALUE FROM HEADACHE_RECORDS WHERE TO_CHAR(HEADACHE_DATE, 'D') = 7 AND HEADACHE_TYPE IS NOT NULL
    )) THEN '#CA4D3C' -- 最大值柱子的颜色
    ELSE '#888888' -- 默认柱子颜色
    END AS bar_colour
FROM (
    SELECT 'PONIEDZIAŁEK' AS X_LABEL, 1 AS X_VAL, COUNT(HEADACHE_DATE) AS Y_VALUE FROM HEADACHE_RECORDS WHERE TO_CHAR(HEADACHE_DATE, 'D') = 1 AND HEADACHE_TYPE IS NOT NULL
    UNION
    SELECT 'WTOREK' AS X_LABEL, 2 AS X_VAL, COUNT(HEADACHE_DATE) AS Y_VALUE FROM HEADACHE_RECORDS WHERE TO_CHAR(HEADACHE_DATE, 'D') = 2 AND HEADACHE_TYPE IS NOT NULL
    UNION
    SELECT 'ŚRODA' AS X_LABEL, 3 AS X_VAL, COUNT(HEADACHE_DATE) AS Y_VALUE FROM HEADACHE_RECORDS WHERE TO_CHAR(HEADACHE_DATE, 'D') = 3 AND HEADACHE_TYPE IS NOT NULL
    UNION
    SELECT 'CZWARTEK' AS X_LABEL, 4 AS X_VAL, COUNT(HEADACHE_DATE) AS Y_VALUE FROM HEADACHE_RECORDS WHERE TO_CHAR(HEADACHE_DATE, 'D') = 4 AND HEADACHE_TYPE IS NOT NULL
    UNION
    SELECT 'PIĄTEK' AS X_LABEL, 5 AS X_VAL, COUNT(HEADACHE_DATE) AS Y_VALUE FROM HEADACHE_RECORDS WHERE TO_CHAR(HEADACHE_DATE, 'D') = 5 AND HEADACHE_TYPE IS NOT NULL
    UNION
    SELECT 'SOBOTA' AS X_LABEL, 6 AS X_VAL, COUNT(HEADACHE_DATE) AS Y_VALUE FROM HEADACHE_RECORDS WHERE TO_CHAR(HEADACHE_DATE, 'D') = 6 AND HEADACHE_TYPE IS NOT NULL
    UNION
    SELECT 'NIEDZIELA' AS X_LABEL, 7 AS X_VAL, COUNT(HEADACHE_DATE) AS Y_VALUE FROM HEADACHE_RECORDS WHERE TO_CHAR(HEADACHE_DATE, 'D') = 7 AND HEADACHE_TYPE IS NOT NULL
    ORDER BY X_VAL
) A

方式2:使用CTE简化代码

WITH weekly_counts AS (
    SELECT 
        CASE TO_CHAR(HEADACHE_DATE, 'D')
            WHEN '1' THEN 'PONIEDZIAŁEK'
            WHEN '2' THEN 'WTOREK'
            WHEN '3' THEN 'ŚRODA'
            WHEN '4' THEN 'CZWARTEK'
            WHEN '5' THEN 'PIĄTEK'
            WHEN '6' THEN 'SOBOTA'
            WHEN '7' THEN 'NIEDZIELA'
        END AS X_LABEL,
        TO_NUMBER(TO_CHAR(HEADACHE_DATE, 'D')) AS X_VAL,
        COUNT(HEADACHE_DATE) AS Y_VALUE
    FROM HEADACHE_RECORDS
    WHERE HEADACHE_TYPE IS NOT NULL
    GROUP BY TO_CHAR(HEADACHE_DATE, 'D')
)
SELECT
    wc.*,
    CASE WHEN wc.Y_VALUE = (SELECT MAX(Y_VALUE) FROM weekly_counts) THEN '#CA4D3C' ELSE '#888888' END AS bar_colour
FROM weekly_counts wc
ORDER BY wc.X_VAL

后续Apex配置

修改完SQL后,在Apex图表的Series选项卡中,将bar_colour字段指定为柱子的颜色来源即可。

内容的提问来源于stack exchange,提问作者Kamil Dudar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 02:43:14