首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在我的Sql中查找列的最大值

在我的Sql中查找列的最大值
EN

Stack Overflow用户
提问于 2015-02-05 14:14:00
回答 1查看 50关注 0票数 0

这是材料表

代码语言:javascript
复制
ID DCNumber  InvoiceNumber  DeviceModel                          DeviceSerialNumber
 1 NULL               1001  Audio Door Phone                      1
 2 NULL               1001  Audio Door Phone                      2
 3 NULL               1001  Audio Door Phone                      3
 4 NULL               1001  Audio Door Phone                      4
 5 NULL               1001  Audio Door Phone                      5
 6 NULL               1001  Audio Door Phone                      6
 7 NULL               1001  Audio Door Phone                      7
 8 NULL               1001  Audio Door Phone                      8
 9 NULL               1001  Forgo cleaning kit.HDP-5000.(89200)   1
10 NULL               1001  Forgo cleaning kit,HDP-5000.(89200)   2
11 NULL               1001  Forgo cleaning kit.HDP-5000.(89200)   3
12 NULL               1001  Forgo cleaning kit HDP-5000.(89200)   4
13 NULL               1001  Forgo cleaning ldt.HDP-5000.(89200)   5
14 NULL               1001  Forgo cleaning kit.HDP-5000.(89200)   6
15 NULL               1001  Forgo cleaning kit.HDP-5000.(89200)   7
16 NULL               1001  Forgo cleaning kit,HDP-5000.(89200)   8
17 NULL               1001  Forgo cleaning kit.HDP-5000.(89200)   9
18 NULL               1001  Forgo cleaning kit,HDP-5000.(89200)  10
19 NULL               1001  Forgo cleaning kit.HDP-5000.(89200)  11
20 NULL               1001  Forgo cleaning kit HDP-5000.(89200)  12
21 NULL               1001  IR Bullet Camera TC62L2A              1

以ID作为主键,我正在尝试执行以下查询。

代码语言:javascript
复制
select DeviceModel,group_concat(`DeviceSerialNumber` separator ',') ``as`SerialNumbers`,max(DeviceSerialNumber) as 'Quantity' from materials  group by InvoiceNumber,DeviceModel having InvoiceNumber= '1001';

以下是输出

但是Quality返回错误的数据,..i需要最大的设备序列号作为特定设备的质量。ie在本案中8、12、20、40

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-05 14:56:25

正如草莓在评论中指出的那样,DevinceSerialNumber列很可能是字符类型的,这将解释为什么9大于12。解决方案是将该列转换为整数:

代码语言:javascript
复制
select
  DeviceModel,
  group_concat(`DeviceSerialNumber`  separator ',') 
as "SerialNumbers",
  max(cast(DeviceSerialNumber as unsigned)) as "Quantity" 
from materials  
where InvoiceNumber= '1001'
group by InvoiceNumber, DeviceModel;

参见这个示例SQL Fiddle,其中第一个查询给出了不正确的结果,第二个查询(使用强制转换)给出了正确的结果。

要按顺序获得DeviceSerialNumber中的group_concat,还应该向函数中添加order子句:

代码语言:javascript
复制
group_concat(
  cast(DeviceSerialNumber as unsigned) 
  order by cast(DeviceSerialNumber as unsigned) 
  separator ','
) 

最后,为了避免在多个地方使用强制转换,您可以在派生表中进行强制转换:

代码语言:javascript
复制
select
  DeviceModel,
  group_concat(DeviceSerialNumber order by DeviceSerialNumber separator ',') 
as "SerialNumbers",
  max(DeviceSerialNumber) as "Quantity" 
from (
  select 
    DeviceModel, 
    InvoiceNumber, 
    cast(DeviceSerialNumber as unsigned) DeviceSerialNumber
  from materials
) materials
where InvoiceNumber= '1001'
group by InvoiceNumber, DeviceModel;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28346215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档