我进行了很多搜索,但没有找到解决我问题的合适方法。
我要怎么办
我在MySQL中有2个表格:-国家-货币(由于多对多关系,我通过CountryCurrency将它们连接在一起->)
参见以下示例:http :
//sqlfiddle.com/#!2/317d3/8/0
我想使用联接将两个表链接在一起,但我想每个国家/地区仅显示一行(某些国家/地区使用多种货币,因此这是第一个问题)。
我找到了group_concat函数:
SELECT country.Name, country.ISOCode_2, group_concat(currency.name) AS currency
FROM country
INNER JOIN countryCurrency ON country.country_id = countryCurrency.country_id
INNER JOIN currency ON currency.currency_id = countryCurrency.currency_id
GROUP BY country.name
结果如下:
NAME ISOCODE_2 CURRENCY
Afghanistan AF Afghani
脜land Islands AX Euro
Albania AL Lek
Algeria DZ Algerian Dinar
American Samoa AS US Dollar,Kwanza,East Caribbean Dollar
但是我现在想要的是将货币拆分为不同的列(货币1,货币2,…)。我已经尝试过MAKE_SET()之类的功能,但这不起作用。
您可以使用substring_index()
。以下查询将您的查询用作子查询,然后应用此逻辑:
select Name, ISOCode_2,
substring_index(currencies, ',', 1) as Currency1,
(case when numc >= 2 then substring_index(substring_index(currencies, ',', 2), ',', -1) end) as Currency2,
(case when numc >= 3 then substring_index(substring_index(currencies, ',', 3), ',', -1) end) as Currency3,
(case when numc >= 4 then substring_index(substring_index(currencies, ',', 4), ',', -1) end) as Currency4,
(case when numc >= 5 then substring_index(substring_index(currencies, ',', 5), ',', -1) end) as Currency5,
(case when numc >= 6 then substring_index(substring_index(currencies, ',', 6), ',', -1) end) as Currency6,
(case when numc >= 7 then substring_index(substring_index(currencies, ',', 7), ',', -1) end) as Currency7,
(case when numc >= 8 then substring_index(substring_index(currencies, ',', 8), ',', -1) end) as Currency8
from (SELECT country.Name, country.ISOCode_2, group_concat(currency.name) AS currencies,
count(*) as numc
FROM country
INNER JOIN countryCurrency ON country.country_id = countryCurrency.country_id
INNER JOIN currency ON currency.currency_id = countryCurrency.currency_id
GROUP BY country.name
) t
该表达式substring_index(currencies, ',' 2)
采用货币列表,直到第二个货币为止。对于美属索莫亚,那就是'US Dollar,Kwanza'
。使用-1
参数作为下一个调用时,将使用列表的最后一个元素,即'Kwanza'
,这是的第二个元素currencies
。
还要注意,SQL查询返回一组定义明确的列。查询不能具有可变的列数(除非您通过prepare
语句使用动态SQL )。
我有这样一份清单: 如何将此列表拆分为三个变量,每个变量分别保持不变
考虑到这个辅助函数: 它应该将基本类型(和字符串)转换为字符串表达式,当我像这样使用它时,MSVC会出现编译错误: 有了clang,编译起来没有任何问题,但有了MSVC,我明白了: 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 显然,编译器会考虑
问题内容: 我正在使用JMH基准测试框架(http://openjdk.java.net/projects/code- tools/jmh/ )在我的代码上运行基准测试。我的理解是,JMH在基准测试期间多次分叉JVM,以便丢弃由JVM在执行期间进行的即时(JIT)分析所建立的任何概要文件。 我了解为什么在某些情况下(例如,下面的情况(从http://java-performance.info/jm
问题内容: 我正在用Socket.IO开发我的第一个Node.js应用程序,一切都很好,但是现在该应用程序正在逐渐变大,我想将应用程序代码分成不同的文件,以进行更好的维护。 例如,我在主文件中定义了所有的猫鼬模式和路由。下面是用于socket.IO连接的所有功能。但是现在我想要为架构添加一个额外的文件,为路由添加一个额外的文件,为功能添加一个额外的文件。 当然,我知道可以编写自己的模块或使用req
我使用http://openjdk.java.net/projects/code-tools/jmh/的JMH基准框架对我的代码进行基准测试。我的理解是,JMH在基准测试期间多次分叉JVM,以便丢弃由JVM在执行期间执行的实时(JIT)分析建立的任何概要文件。 我理解为什么这在某些情况下是有用的,比如下面(逐字复制自http://Java-performance . info/jmh/): 默认情
我试图在repl中创建一些类,当我创建具有与第一个类相同属性的第二个类时,我被告知它已经定义了。 这仅仅是repl不能正确处理名称空间的问题吗?它在文件中按预期工作。 Perl6版本:这是Rakudo版本2018.10,构建于MoarVM版本2018.10之上,实现Perl 6。c