簡體   English   中英

帶大小寫的 SQL 計數

[英]SQL Count with Case

我正在嘗試做這樣的事情。

signal_status    signal_count
---------------|---------------
Average        |    10   
Good           |    11  
Very Poor      |     4  
Poor           |     5  
Below Average  |     8  
Excellent      |    13

設備總數為 51,其計數應按照上面在 signal_count 中定義的方式進行。

我所取得的是獲得了signal_status(僅第一列)。 現在我也想要計數,但無法根據設備獲得計數。 這是我試圖獲取第一列的查詢。

select signal_status from (select case 
when signal_info <= 31 and signal_info > 24 then 'Excellent' 
when signal_info <= 24 and signal_info > 19 then 'Good' 
when signal_info <= 19 and signal_info > 14 then 'Average' 
when signal_info <= 14 and signal_info > 9 then 'Below Average' 
when signal_info <= 9 and signal_info > 5 then 'Poor' 
when signal_info <= 5 and signal_info > 0 then 'Very Poor' end 
AS signal_status from data_channel) AS WTH group by signal_status;

我嘗試了所有可能的方法,但無法獲取所需的結果。 data_channel 表包含以下列: sno (PK), device_id, signal_info, datetime ,我希望它與 table_1 連接以加入 device_id。 table_1 包含以下列: device_id (PK), device_name

基本上我想要做的是我想要所有設備的信號強度為好或差的計數,但我得到的是表中的總記錄,而不是基於最近的設備信號信息。 如果不清楚,請見諒。

注意:使用 SQL Server 而不是 MySQL

你就快到了——你只是錯過了在你的選擇列表中count的電話:

SELECT   signal_status, 
         COUNT(*) -- Here!
FROM     (SELECT CASE WHEN signal_info <= 31 AND signal_info > 24 THEN 'Excellent' 
                      WHEN signal_info <= 24 AND signal_info > 19 THEN 'Good' 
                      WHEN signal_info <= 19 AND signal_info > 14 THEN 'Average' 
                      WHEN signal_info <= 14 AND signal_info > 9  THEN 'Below Average' 
                      WHEN signal_info <= 9  AND signal_info > 5  THEN 'Poor' 
                      WHEN signal_info <= 5  AND signal_info > 0  THEN 'Very Poor'
                 END  AS signal_status 
          FROM data_channel) AS wth
GROUP BY signal_status;

嘗試這個:

SELECT signal_status, COUNT(device_id) signal_count 
FROM 
(
    SELECT CASE 
                WHEN signal_info <= 31 and signal_info > 24 THEN 'Excellent' 
                WHEN signal_info <= 24 and signal_info > 19 THEN 'Good' 
                WHEN signal_info <= 19 and signal_info > 14 THEN 'Average' 
                WHEN signal_info <= 14 and signal_info > 9 THEN 'Below Average' 
                WHEN signal_info <= 9 and signal_info > 5 THEN 'Poor' 
                WHEN signal_info <= 5 and signal_info > 0 THEN 'Very Poor' 
            END signal_status
           ,device_id
           ,ROW_NUMBER() OVER (PARTITION BY device_id ORDER BY [datetime] DESC) AS [RowID]
    FROM data_channel
) AS WTH
WHERE [RowID] = 1
GROUP BY signal_status

試試這個:

SELECT signal_status, COUNT(DISTINCT device_id) signal_count FROM (
    SELECT 
        CASE 
            WHEN signal_info <= 31 and signal_info > 24 THEN 'Excellent' 
            WHEN signal_info <= 24 and signal_info > 19 THEN 'Good' 
            WHEN signal_info <= 19 and signal_info > 14 THEN 'Average' 
            WHEN signal_info <= 14 and signal_info > 9 THEN 'Below Average' 
            WHEN signal_info <= 9 and signal_info > 5 THEN 'Poor' 
            WHEN signal_info <= 5 and signal_info > 0 THEN 'Very Poor' 
        END signal_status, device_id 
    FROM data_channel
) AS WTH 
GROUP BY signal_status

以上答案是正確的,查看樣本數據和輸出。 如果您有不同的要求,請提供示例數據。

--drop table #data_channel

create table #data_channel
(
sno int identity primary key,
device_id varchar(100), 
signal_info int
)

insert into #data_channel values
('A',24),
('B',14),
('C',24),
('D',31),
('E',1),
('F',13),
('G',20),
('H',12)--,('A',24),('A',24),('A',24),('A',24),('A',24),('A',24),

詢問

select signal_status,Count(*) as signalcount
 from (select case 
when signal_info <= 31 and signal_info > 24 then 'Excellent' 
when signal_info <= 24 and signal_info > 19 then 'Good' 
when signal_info <= 19 and signal_info > 14 then 'Average' 
when signal_info <= 14 and signal_info > 9 then 'Below Average' 
when signal_info <= 9 and signal_info > 5 then 'Poor' 
when signal_info <= 5 and signal_info > 0 then 'Very Poor' end 
AS signal_status from #data_channel) AS WTH group by signal_status;

輸出

signal_status   signalcount
Below Average   3
Excellent   1
Good    3
Very Poor   1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM