[MYSQL QUERY / LARAVEL ELOQUENT QUESTION]

您好,我真的需要一些帮助MYSQL查询这3个表,我有.订单表和详细信息是在我们的系统上手动输入的.

我是MYSQL新手,需要帮助而不是法官.

PERSON TABLE

ID PERSON_NAME
1 Jackie
2 Chan

ORDER TABLE(订单)

ID PERSON_ID ORDER_DATE
1 1 (Jackie) January 01, 2022
2 1 (Jackie) January 02, 2022
3 2 (Chan) January 02, 2022
4 2 (Chan) January 03, 2022
5 1 (Jackie) January 04, 2022
6 1 (Jackie) January 05, 2022

ORDER DETAIL TABLE(订单详情)

ID ORDER_ID DESCRIPTION PRICE
1 1 Apple 100
2 1 Orange 80
3 1 Mango 90
4 3 Grape 50
5 3 Apple 100
6 4 Apple 100
7 5 Orange 80
8 5 Mango 90

QUESTION

在这里,我将三个表合并在一起,这就是我得到的,它显示Order ID 2 and 6没有在我们的系统上添加任何订单细节(手动),比如说我忘记添加细节.所以我需要在个人页面上显示为一个错误.

SELECT
  o.id as order_id,
  p.name as person_name,
  o.date as order_date,
  COUNT(od.id) as count_order_detail,
  SUM(od.price) as subtotal
FROM persons p
JOIN orders o ON o.person_id = p.id
JOIN order_details od ON od.order_id = o.id
GROUP BY o.order_id
ORDER_ID PERSON_NAME ORDER_DATE COUNT_ORDER_DETAIL SUBTOTAL
1 Jackie January 01, 2022 3 270
2 Jackie January 02, 2022 0 0
3 Chan January 02, 2022 2 150
4 Chan January 03, 2022 1 100
5 Jackie January 04, 2022 2 170
6 Jackie January 05, 2022 0 0

EXPECTED QUERY RESULT ON MYSQL TABLE

这是我期望的结果,显示了订单的结果,没有任何细节.

PERSON_NAME ORDERS ERROR_ORDER
Jackie 4 Orders 2
Chan 2 Orders -

我该怎么做?我试着数数,但数错了.

100

推荐答案

在没有错误的情况下,我无法让宣传进入ERROR_ORDER,但这应该非常接近,否则:

SELECT name AS PERSON_NAME, 
       CONCAT(count(id), ' Orders') AS ORDERS, 
       CONCAT(count(order_id), ': ', 
           GROUP_CONCAT(IF(ISNULL(order_id), id, NULL))) AS 'ERROR_ORDER'
FROM (
    SELECT name, o.id, order_id
      FROM persons p JOIN orders o ON o.person_id = p.id
        LEFT JOIN order_details od ON od.order_id = o.id
     GROUP BY name, o.id, order_id
) x
GROUP BY name
ORDER BY ORDERS DESC;

它给出:

PERSON_NAME ORDERS ERROR_ORDER
jackie 4 Orders 2: 2,6
chan 2 Orders null

...或者通过截图:

enter image description here

示例dbfiddle包含所有数据.

=====

但是,如果您只想在最后一列中显示2,而不想显示订单引用,则将select的最后一部分更改为:

CONCAT(SUM(IF(ISNULL(order_id), 1, null))) AS 'ERROR_ORDER'

看起来是这样的:

PERSON_NAME ORDERS ERROR_ORDER
jackie 4 Orders 2
chan 2 Orders null

...或者通过截图:

enter image description here

fiddle为本例.

Mysql相关问答推荐

正在获取MySQL死锁,因为这个查询需要很长时间.

如何将MySQL与AS&Quot;语法一起用于存储过程返回的表?

MySQL INSERT INSERT ON DIPLICATE KEY UPDATE WITH COMPAY PRIMARY KEY失败

含有子查询的MySQL函数出现语法错误

Golang中使用Gorm的Where条件转义字符无法正常工作的问题

生成直到 10 的平方数序列

基于其列之一内的值查询模型

在 MySQL 中跨日期和位置计算和排序实体的共现

如何同时从同一个表中 Select 从 SQL 表中删除行

如何在更新表单中使用 group by?在 SQL 中

从多到多表中 Select 数据而无需重复

如何解决这个特定的 SQL 查询?我的解决方案还返回不想要的值

SQL从字典中的键获取值

使用数据表的直方图(SQL 查询)

即使我的约束是正确的,如何解决 errno: 150 外键约束形成错误?

MySQL:使用来自查询的信息创建一个新表

SQL 中的双杠 (||) 是什么意思?

If else on WHERE 子句

MySQL Group By 和 Sum 其他列的总值

WHERE 子句中的条件顺序会影响 MySQL 性能吗?