【问题标题】:How to select customer names with maximum invoice value [closed]如何选择具有最大发票价值的客户名称[关闭]
【发布时间】:2021-01-06 03:35:30
【问题描述】:

我有两张桌子

Customers
----------------
ID  | Name 
----+-----------
123 | Name1
456 | Name2
789 | Name3
----------------


Invoices
------------------
ID  | Value
----+-------------
123 | 1000
456 | 500
789 | 1000
------------------

我想选择发票金额最高的客户名称

【问题讨论】:

  • 你想要这个样本数据的哪个结果?另外,如果客户有多张发票怎么办?
  • 您想要获得最高客户,还是想要获得发票金额按降序排列的多个客户?
  • 我想获取发票金额最高的客户姓名,在这种情况下,发票金额最高为 1000,结果应该是 name1 和 name3
  • 无论客户是否有多张发票,只要其中一张发票等于最高发票价值,他的名字就应该被退回
  • 你得到答案了吗?你能告诉你正在使用的 MySQL 版本吗?

标签: mysql sql join greatest-n-per-group


【解决方案1】:

我们也可以通过子查询获得结果。 使用带有值和名称的 [] 括号。因为这是SQL server中的保留关键字

SELECT C.ID, C.[Name], I.[Value]
FROM Customers C WITH(NOLOCK)
JOIN (
       SELECT TOP 1 ID, [Value]
       FROM Invoices WITH(NOLOCK)
       ORDER BY [Value] DESC
      ) AS I
ON C.ID = I.ID

【讨论】:

  • 这是一个 mysql 问题的 sqlserver 答案 - 代码不可传输,因此您可能会吸引反对票
  • 他已经提到了SQL和我的SQL。请检查定义和他的评论@P.Salmon
  • 请查看 sql 标签——这并不意味着 OP 正在使用 sqlserver——这就是为什么存在标签以更准确地识别问题所在的 sql 方言的原因。如果 OP 想要 sqlserver,那么有一个标签。
【解决方案2】:

根据最大值测试

select c.name , i.value
from customers c
join invoices i on i.id = c.id
where i.value = (select max(value) from invoices);

+-------+-------+
| name  | value |
+-------+-------+
| Name1 |  1000 |
| Name3 |  1000 |
+-------+-------+
2 rows in set (0.001 sec)

【讨论】:

  • 它确实有效,谢谢
猜你喜欢
  • 2019-12-04
  • 1970-01-01
  • 2013-11-06
  • 2021-12-07
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多