我可以在临时表变量上使用 substring() 吗?
Posted
技术标签:
【中文标题】我可以在临时表变量上使用 substring() 吗?【英文标题】:Can I use substring() on a temporary table variable? 【发布时间】:2020-08-01 09:14:15 【问题描述】:我使用以下方法按每个域组的最高分对数据进行排序:
SELECT * from `Inputs` t
order by (select max(`score`) from `Inputs` t1 where t1.`domain`=t.`domain`) desc, `score` desc
结果是:
query domain url score
a www.google.com www.google.com/a 3
a www.google.com www.google.com/b 1
a www.facebook.com www.google.com/c 2
我不想将域和 url 存储在数据库中,而是使用以下方法计算域作为查询中 url 的函数:
SUBSTRING(`url` from 1 for locate('/',`url` ,10)-1) as `domain`
如果可能,我将能够使用更少的列来实现相同的条目顺序(如上所示):
query url score
a www.google.com/a 3
a www.google.com/b 1
a www.google.com/c 2
如果可能的话,有谁知道这是如何实现的?我没有在 *** 上找到其他关于使用临时表的列别名的问题。
我尝试嵌套另一个查询,但没有运气:
SELECT *, SUBSTRING(`url` from 1 for locate('/',`url` ,10)-1) as `domain` from `Inputs` t
order by (select max(`score`),
(select SUBSTRING(`url` from 1 for locate('/',`url` ,10)-1) as `domain` from `Inputs` t1 )
from `Inputs` t1 where t1.`domain`=t.`domain`) asc, `score` asc
【问题讨论】:
你真的不止一次地问同样的问题,并且接受(有时)一个答案,在被问到之后改变问题,并且有人要求更多信息,就开始无视他吗? (参考1:***.com/questions/63202363/…;参考2:***.com/questions/63193038/…) 【参考方案1】:您可以为此目的使用 [substring_Index][1],但您最终必须更改 CHAR 的数据类型或站点
实际上不需要该函数使代码更具可读性
架构 (MySQL v5.7)
CREATE TABLE Inputs (
`query` VARCHAR(1),
`domain` VARCHAR(16),
`url` VARCHAR(16),
`score` INTEGER
);
INSERT INTO Inputs
(`query`, `domain`, `url`, `score`)
VALUES
('a', 'www.google.com', 'www.google.com/a', '3'),
('a', 'www.google.com', 'www.google.com/b', '1'),
('a', 'www.facebook.com', 'www.google.com/c', '2');
CREATE FUNCTION geturl (_url CHAR(255))
RETURNS CHAR(255) DETERMINISTIC
RETURN SUBSTRING_INDEX(_url, "/", 1);
查询 #1
select `query`, `domain`, `url` , `score`
from Inputs t
order by
(select max(score) from Inputs t1 where geturl(t1.url) = geturl(t.url)) desc,
score desc;
| query | domain | url | score |
| ----- | ---------------- | ---------------- | ----- |
| a | www.google.com | www.google.com/a | 3 |
| a | www.facebook.com | www.google.com/c | 2 |
| a | www.google.com | www.google.com/b | 1 |
View on DB Fiddle
【讨论】:
嘿@nbk。为混乱道歉。我不想创建一个函数,然后调用。我想将原始排序查询与 substring() 函数结合起来。我已经更新了我的问题,以包括我对代码可能是什么样子的尝试。希望这会有所帮助。 ülease 显示你想要得到的 wjat 结果,因为我不知道第二个订单应该是什么。 订购结果没有改变,@nbk。我需要在我的数据库中保存以实现该结果的数据(我不需要域列来对条目进行分组,因为我是从 url 派生域)。我已经更新了我的问题以反映这一点。 你注意到你不能这样做,除了你按最大值排序之外,不起作用。排序必须是可枚举的,可以排序的,并且最大值不是其中之一,所以请准确解释是什么使得这个顺序仍然很不清楚,可能是另一个域' 更多信息:***.com/questions/63193038/…以上是关于我可以在临时表变量上使用 substring() 吗?的主要内容,如果未能解决你的问题,请参考以下文章