gpt4 book ai didi

mysql - 如何使用 SQL 从多值属性中从最高到最低的出现次数排序?

转载 作者:行者123 更新时间:2023-11-30 23:02:56 25 4
gpt4 key购买 nike

我正在使用 MySQL 并且有 2 个表用于餐厅菜单,名为:

  1. 项目(项目代码、项目名称、价格、项目类型、位置、备注)
  2. 订单(Order_Code、Item_Code、Ingredient_Code)

'Order' 表中的属性 'Item_Code' 是多值的。

我如何编写一个 SQL 查询来显示 item_codeitem_name(来自“Item”表),按出现顺序(从最高到最低在'Order' 表?

感谢您的帮助。谢谢。

示例数据:

项目表:

(Item_Code, Item_Name, Price, Item_Type, Location, Notes)
'I001' 'Chicken Rice' '7.00' 'Main Course' 'Kitchen' 'Non-vegetarian'
'I002' 'French Fries' '3.00' 'Appetiser' 'Kitchen' 'Vegetarian'
'I003' 'Iced Lemon Tea' '2.00' 'Beverage' 'Bar' 'Non-Alcoholic'
'I004' 'Fish and Chips' '8.00' 'Main Course' 'Kitchen' 'Halal'
'I005' 'Vanilla Ice Cream' '4.00' 'Dessert' 'Kitchen' 'NA'

订单表:

Order_Code, Item_Code, Ingredient_Code
'O222221', 'I001 I002', 'NA'
'O222222', 'I001 I003', 'AI03'
'O222223', 'I004 I005 I001', 'AI01'
'O222224', 'I002 I002 I004', 'AI04'
'O222225', 'I001 I002 I003', 'AI05'

最佳答案

您的数据布局非常糟糕。您应该有第三个表,OrderItems,每个订单和订单中的商品各占一行。

您可以使用字符串操作来做您想做的事。遗憾的是,您无法利用索引和其他数据库优化。

select i.item_code, count(*) as cnt
from orders o join
items i
on concat(' ', o.item_code, ' ') like concat('% ', i.item_code, ' %')
group by i.item_code
order by count(*) desc;

编辑:

您可以通过运行与上述查询非常相似的查询来创建 OrderItems 表:

select o.order_id, i.item_code
from orders o join
items i
on concat(' ', o.item_code, ' ') like concat('% ', i.item_code, ' %');

然后将其插入到新表中或使用create table as

关于mysql - 如何使用 SQL 从多值属性中从最高到最低的出现次数排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23189900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com