高级排序sql firebird(取决于不同的列)、desc、ignore
[sql高级排序]请点击图片查看数据库示例(我的声誉太低,无法发布普通图片 我有数据库的以下部分,所选文本是正确的, 未选择的文本是我希望能起作用的部分(但我缺乏理解这一点的经验) 稀有有4个值,我想首先选择M和R这两个似乎成功的值 然后是棘手的部分,因为我使用sql的经验非常有限,而且我的ask好友不在城里 当premium='F'时,它实际上意味着它是一张普通卡,因此它需要链接到normalbuy和NormalSell列。foillbuy和foilsell应该被忽略,用于描述porpuse 当premium='T'时,它实际上意味着它是一张普通卡,因此它需要链接到foillbuy和foilsell列。对于desc porpuse,应该忽略normalbuy和NormalSell 那么我只想按价格从高到低排序 另请注意:高级排序sql firebird(取决于不同的列)、desc、ignore,sql,sorting,firebird,multi-select,Sql,Sorting,Firebird,Multi Select,[sql高级排序]请点击图片查看数据库示例(我的声誉太低,无法发布普通图片 我有数据库的以下部分,所选文本是正确的, 未选择的文本是我希望能起作用的部分(但我缺乏理解这一点的经验) 稀有有4个值,我想首先选择M和R这两个似乎成功的值 然后是棘手的部分,因为我使用sql的经验非常有限,而且我的ask好友不在城里 当premium='F'时,它实际上意味着它是一张普通卡,因此它需要链接到normalbuy和NormalSell列。foillbuy和foilsell应该被忽略,用于描述porpuse
Premium |NormalBuy | Normalsell | FoilBuy| FoilSell | Stock
F 9.66 | 15.99 | 27.00 | 35.500 | 1
这意味着我有一张普通卡,因为股票1和溢价是假的,foilbuy和foilsell信息在排序时可以忽略
Premium |NormalBuy | Normalsell | FoilBuy| FoilSell | Stock
T 0.030 | 0.040 | 0.100 | 0.500 | 1
这意味着我有一张箔卡,因为股票1和溢价是真实的,为了排序,可以忽略正常买入和正常卖出信息
Premium |NormalBuy | Normalsell | FoilBuy| FoilSell | Stock
T 0.030 | 0.040 | 0.100 | 0.500 | 1
下面是一个它应该是什么样子的示例
Rarity|Premium|NormalBuy|Normalsell|FoilBuy|FoilSell|Stock(row order)(leading)
M F 0.400 0.700 4.000 10.000 4 1
M F 1.420 1.800 4.000 12.000 4 2
M F 3.250 3.850 10.000 15.000 4 3
M T 1.350 1.700 4.000 16.000 4 4
M F 3.600 4.250 12.500 16.000 4 5
M F 3.100 4.000 9.000 16.750 4 6
M T 6.750 7.750 8.000 17.000 4 7
M F 5.500 5.750 14.500 17.500 4 8
M T 3.000 5.000 9.000 19.000 4 9
M F 14.00 18.000 17.750 28.000 4 10
below should be the result
M T 3.000 5.000 9.000 19.000 4 9 19.000
M F 14.00 18.000 17.750 28.000 4 10 18.000
M T 6.750 7.750 8.000 17.000 4 7 17.000
M T 1.350 1.700 4.000 16.000 4 4 16.000
M F 5.500 5.750 14.500 17.500 4 8 5.750
M F 3.600 4.250 12.500 16.000 4 5 4.250
M F 3.100 4.000 9.000 16.750 4 6 4.000
M F 3.250 3.850 10.000 15.000 4 3 3.850
M F 1.420 1.800 4.000 12.000 4 2 1.800
M F 0.400 0.700 4.000 10.000 4 1 0.700
要决定要对哪些列进行排序,您需要在order by(可能是多个)中使用
CASE
条件,使用与条件的并集并按列索引排序,或者使用内部选择将值分配给虚拟列,然后按该列进行排序
按大小写排序
:
SELECT ...
FROM ...
ORDER BY CASE WHEN Premium = 'T' THEN FOILBUY ELSE NORMALBUY END,
CASE WHEN Premium = 'T' THEN FOILSELL ELSE NORMALSELL END
使用联合进行排序
:
SELECT FOILBUY, FOILSELL, ...
FROM ...
WHERE Premium = 'T'
UNION ALL
SELECT NORMALBUY, NORMALSELL, ...
WHERE Premium = 'F'
ORDER BY 1, 2
使用内部选择进行排序
SELECT BUY, SELL, ...
FROM (
SELECT CASE WHEN Premium = 'T' THEN FOILBUY ELSE NORMALBUY END AS BUY,
CASE WHEN Premium = 'T' THEN FOILSELL ELSE NORMALSELL END AS SELL,
...
FROM ...
)
ORDER BY BUY, SELL
但是,如果有一个显示需要使用哪些列的鉴别器列,则可能表明存在数据库规范化问题。如果无法消除此问题,您可能需要查看您的数据库设计。您能否提供一些示例数据以及您希望如何对其进行排序?我可以,提供什么样的最佳做法?一个带下载的链接csv或纯文本,给我4-5minutes@Maverson…用几行文字来说明数据和所需的排序来编辑问题是最好的方法。对我来说,这听起来很糟糕。