【问题标题】:GROUP BY characteristic in mysql [closed]mysql中的GROUP BY特征[关闭]
【发布时间】:2013-12-29 21:14:23
【问题描述】:

我有以下 SQL 表和查询,如以下 sqlfiddle 所示:http://sqlfiddle.com/#!2/37eda/1/0

当前结果如下所示:

id  definition_id   service_id  provider_id amount
2       1               25              24  200.00
3       1               NULL            24  300.00
20      3               25              24  700.00
30      4               NULL            24  800.00

我需要将查询限制为每个条目仅显示一个definition_id。如果有两个definition_id,它应该使用具有非NULL service_id 的一个。正确的结果应该是:

id  definition_id   service_id  provider_id amount
2       1               25              24  200.00
20      3               25              24  700.00
30      4               NULL            24  800.00

这里正确的 SQL 查询是什么?

【问题讨论】:

  • 我贴的sqlfiddle里都有显示(创建表语法,我正在使用的查询等)请看一下。
  • 我的意思是你尝试过什么来提出正确的查询?
  • @DanielA.White 各种GROUP BY 声明,但我无法得到正确的声明来尊重我需要得到的内容。
  • 如果有两个 definition_ids 和两个关联的 service_ids 怎么办?
  • select definition_id, max(service_id), provider_id, amount from billing_billingmatrix where (provider_id=24 or provider_id is null) and (service_id=25 or service_id is null) group by definition_id,这在上述情况下有效,但似乎并非在所有情况下都有效。

标签: mysql sql select


【解决方案1】:

尝试使用子选择先排序然后分组,正常分组将使用记录的第一次出现,所以先让它像ORDER BY service_id DESC然后使用分组

SELECT t.* FROM (
select * from billing_billingmatrix 
where (provider_id=24 
or provider_id is null) 
and (service_id=25 or service_id is null)
ORDER BY service_id DESC
  ) t GROUP BY t.definition_id 

Fiddle

【讨论】:

  • 非常感谢,这正是我想要的。谢谢!
  • @downvoters 表示尊重和谨慎解释
猜你喜欢
  • 2011-07-18
  • 2022-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2016-04-03
  • 2013-01-24
相关资源
最近更新 更多