简体   繁体   English

查找最大查询数(SQL Server 2016)

[英]Find max count of query (SQL Server 2016)

Q1: How do I get a count of NICs for each virtual machine? Q1:如何获得每个虚拟机的NIC数量? eg 例如

virtualMachine1  2
virtualMachine2  3
virtualMachine3  1
virtualMachine4  2

Q2: How do I get the value that represents the max number of NICs for any virtual machine? Q2:如何获得代表任何虚拟机的最大NIC数量的值? eg 例如

10

The following query returns all virtual machine-nic pairs: 以下查询返回所有虚拟机网卡对:

SELECT VirtualMachine.VirtualMachineName, VMToNetwork.MacAddress
FROM   VirtualMachine
        INNER JOIN VMToNetwork
         ON VirtualMachine.VirtualMachineID = VMToNetwork.VirtualMachineID 
ORDER BY VirtualMachine.VirtualMachineName

The field 'VMToNetwork.MacAddress' is not used other than to illustrate that the join worked. 字段“ VMToNetwork.MacAddress”仅用于说明联接有效。

This query attempts to count the number of NICs per virtual machine but simply sums up the total number of NICs. 该查询尝试计算每个虚拟机的NIC数量,但只是将NIC的总数相加即可。

SELECT count( VMToNetwork.MacAddress )
FROM   VirtualMachine
        INNER JOIN VMToNetwork
          ON VirtualMachine.VirtualMachineID = VMToNetwork.VirtualMachineID 

Thanks. 谢谢。

Add the group by clause and it will count the values unique to each machine name: 添加group by子句,它将计算每个计算机名称唯一的值:

SELECT VirtualMachine.VirtualMachineName, count( VMToNetwork.MacAddress )
FROM   VirtualMachine
        INNER JOIN VMToNetwork
          ON VirtualMachine.VirtualMachineID = VMToNetwork.VirtualMachineID
        GROUP BY VirtualMachine.VirtualMachineName 

To get a count of NICs per VM, you must group by VM Name: 要获取每个VM的NIC数量,必须按VM名称分组:

SELECT VirtualMachine.VirtualMachineName, count(VMToNetwork.MacAddress) as NICCount
FROM VirtualMachine
INNER JOIN VMToNetwork ON VirtualMachine.VirtualMachineID = VMToNetwork.VirtualMachineID
GROUP BY VirtualMachine.VirtualMachineName

To get the maximum from that, you can order by NICCount and get the top: 要从中获得最大收益,您可以按NICCount排序并获得最高价:

SELECT TOP 1 VirtualMachine.VirtualMachineName, count(VMToNetwork.MacAddress) as NICCount
FROM VirtualMachine
INNER JOIN VMToNetwork ON VirtualMachine.VirtualMachineID = VMToNetwork.VirtualMachineID
GROUP BY VirtualMachine.VirtualMachineName
ORDER BY NICCount

Note that in a tie, you will only get one of the tie members. 请注意,在平局中,您只会得到一名平局成员。

If you just wanted the maximum NIC count, you can also use a subquery: 如果只需要最大NIC数,也可以使用子查询:

SELECT MAX(T1.NICCount)
FROM (
    SELECT count(VMToNetwork.MacAddress) as NICCount
    FROM VirtualMachine
    INNER JOIN VMToNetwork ON VirtualMachine.VirtualMachineID = VMToNetwork.VirtualMachineID
    GROUP BY VirtualMachine.VirtualMachineName
) as T1

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM