如何从SQL Server中的两个表中找到MAX值?

时间:2016-09-10 13:14:22

标签: sql-server-2008 max

我正在学习SQL并尝试使用SQL Server。我有两张桌子。

表1

+------+--------+--------+
|  IDK |  CODE  |  NAME  | 
+------+--------+--------+
|  1   |   742  |   PEN  |
|  2   |   853  |   PEN  |
|  3   |   724  | PAPPER |
|  4   |   544  |   PEN  |
|  5   |   451  | PRINTER|
+------+--------+--------+

表2

+------+--------+
|  IDK |   QTY  | 
+------+--------+
|  1   |   154  | 
|  2   |   85   |  
|  3   |   74   |
|  4   |   44   |
|  5   |   51   |
+------+--------+

我想找到CODE QTY,其中myname = "PEN"的名称为PEN。 我有一个变量SELECT Table1.CODE FROM Table1 INNER JOIN Table2 ON Table1.IDK = Table2.IDK WHERE Table2.QTY = (SELECT MAX(Table2.QTY) FROM Table2 WHERE Table1.NAME = :myname)

我试过了:

742

我应该写什么才能返回.container { text-align: center; ... }

3 个答案:

答案 0 :(得分:1)

公共表表达式对此问题非常有用。您真正想要查询的“核心”表实际上是表1和表2连接在一起。通过将此联接放入CTE,我们可以轻松地重复使用它来获得您所寻求的答案。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.fooddeliverycaller">


<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<uses-sdk
    android:minSdkVersion="15"
    android:targetSdkVersion="24" />


<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <meta-data android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version"/>

    <activity android:name="com.google.android.gms.ads.AdActivity"
        android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
</application>

答案 1 :(得分:0)

你可以获得最大值,然后像{/ 1}那样{/}}

JOIN

答案 2 :(得分:0)

看起来你走在正确的轨道上,你应该调整你的简单查询,然后再去看看 - Occam的Razor。您只需订购查询,然后限制查询结果的数量。这是一个主要的SQL发行版不一致的领域,我不确定它是否是由于制造商在SQL规范或流氓语言定义中缺乏设计。

在Oracle和Postgres中你需要OFFSET和LIMIT,在MySQL中你只需要LIMIT,而在IBM DB2中你将使用FETCH FIRST,它们都位于查询的末尾。 使用T-SQL(对于MS SQL Server)时,您将在SELECT中使用TOP。

DECLARE @myname VARCHAR(32) = 'PEN'

SELECT TOP 1 
    t1.CODE
FROM Table1 t1
INNER JOIN t2
ON t1.IDK = t2.IDK
WHERE t1.NAME = @myname
ORDER BY t2.QTY

在数据库编程阶段,我要提醒您不要在不了解后果的情况下使用内存表。它们是OLAP和其他分析的绝佳工具,但在资源受到竞争或受到约束的环境中可能会产生意想不到的性能影响。

此外,在可读性,可维护性和性能不必要时,请避免嵌套查询。每个嵌套级别都会为处理的数据量增加一个维度,查询时间与数据量的比率大致为1:1。在这种情况下,嵌套和JOINing将对数据大小产生相同的影响,但嵌套将排除某些数据库优化的能力。这些策略在正确的目的下都非常出色,但是当有人学习时,请确保在依赖它们之前理解它们。