Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于逗号分隔字符串的SQL排序?_Sql_Sqlite - Fatal编程技术网

基于逗号分隔字符串的SQL排序?

基于逗号分隔字符串的SQL排序?,sql,sqlite,Sql,Sqlite,假设我有一张看起来像这样的桌子,很抱歉用了一张图片,但我不知道如何得到一张格式很好的桌子,所以…: 我想做一个查询,根据配方出现的频率对配料进行排序。因此,在本例中,我们希望看到以下输出: 我在想,LIKE和IN可能有助于进行此搜索,但我不确定如何从那里开始。我真的无法抗拒一个你无法引用的词。你的解决方案如下 SELECT Item FROM ( SELECT LTRIM(x.XmlCol.value('.','varchar(100)')) 'Item' FROM (

假设我有一张看起来像这样的桌子,很抱歉用了一张图片,但我不知道如何得到一张格式很好的桌子,所以…:

我想做一个查询,根据配方出现的频率对配料进行排序。因此,在本例中,我们希望看到以下输出:


我在想,LIKE和IN可能有助于进行此搜索,但我不确定如何从那里开始。

我真的无法抗拒一个你无法引用的词。你的解决方案如下

SELECT Item
FROM
(
    SELECT LTRIM(x.XmlCol.value('.','varchar(100)')) 'Item'
    FROM 
    (
        SELECT CAST('<A>'+REPLACE(ingredients,',','</A><A>')+'</A>' AS XML) 'Ingredient'
        FROM #recipes ) Mytab
    CROSS APPLY Mytab.Ingredient.nodes('/A') x(xmlcol)
) Listing
GROUP BY ITEM
ORDER BY Count(1) DESC

你自己试试看。简而言之,首先用XML分隔符替换逗号,然后为了提高效率,调用Microsofts自己的XML方法将值列表转换为表格输出。然后,您只需将批次放入FROM语句中,并使用order by进行分组。

修复数据结构,这样您就有了一个表,比如RecipeIngElements,每个配方和成分有一行。您无法直接使用SQL以当前表格式执行此操作。你必须知道@GordonLinoff在说什么。或者,您可以提取每一行,解析各个成分,并在哈希中计算它们。如果数据集不是太大,那么性能就不会那么差。谢谢大家!有没有一种方法可以让我使用SQL以编程方式创建那个额外的表,或者我必须将它连接到Python或其他什么东西?对于问题和答案中的表的格式,可以使用html标记。