我从以下 MySQL 查询中得到异常/不正确的结果:
`select CarrierID, CarrierName,
count(distinct case when CaseYear = '2022'then CaseNumber Else 0 end) as '2022',
count(distinct case when CaseYear = '2021'then CaseNumber Else 0 end) as '2021',
count(distinct case when CaseYear = '2020'then CaseNumber Else 0 end) as '2020'
from SalesRegister where CarrierName like 'Grange%'
group by CarrierName order by 3 desc, 1 asc;`
SalesRegister 表具有以下架构:
使用这个查询
“select CaseNumber, CaseYear, CaseMonth from SalesRegister where CarrierName like 'Grange%' order by CaseYear desc, CaseMonth asc”,
SalesRegister 表具有 CarrierName“Grange%”的以下条目:
CaseNumber CaseYear CaseMonth 24000A019467 2020 4 24000A019468 2020 4 24000A014820 2019 1 24000A015307 2019 3 24000A015308 2019 3 24000A015552 2019 4 24000A015728 2019 4 WEB00A671142 2019 4 WEB00A668109 2019 5 24000A016137 2019 6 WEB00A866344 2019 11
您会注意到,2019 年有 9 个 CaseNumbers,2020 年有 2 个 CaseNumbers。没有 2021 年或 2022 年的 CaseNumbers。
但是,当我执行这个问题顶部显示的查询时,我得到以下结果:
运营商 ID 运营商名称 2022 2021 2020 9761 田庄 1 1 3
当我对所需的每一年(2022 年、2021 年和 2020 年)执行以下查询时:
从 SalesRegister 中选择 CaseYear,count(CaseNumber) 其中 CarrierName 像 'Grange%' 和 CaseYear = '2020' 按 CaseYear 分组;
我得到了正确的结果,但是当我使用这个问题顶部查询中显示的“CASE”函数时,我得到了异常/不正确的结果。
我的问题——顶级查询(使用 CASE 函数)如何产生不正确的结果?语法错误吗? GroupBy 错了吗?
我希望收到准确的结果,但查询返回的信息不正确。