Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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
Mysql 有没有办法从嵌套查询返回计算值?_Mysql_Nested Queries - Fatal编程技术网

Mysql 有没有办法从嵌套查询返回计算值?

Mysql 有没有办法从嵌套查询返回计算值?,mysql,nested-queries,Mysql,Nested Queries,好吧,我花了一个星期的时间想弄明白这一点,但我似乎找不到我要找的东西。我认为,在看到伪代码后,有两个类似的问题更容易解释。这是第一个 SELECT P_CODE, P_DESCRIPT, @diff FROM PRODUCT WHERE @diff := (SELECT ROUND(ABS(P_PRICE -(SUM(P_PRICE)/COUNT(P_PRICE))),2) FROM PRODUCT WHERE P_PRICE in (SELECT P_P

好吧,我花了一个星期的时间想弄明白这一点,但我似乎找不到我要找的东西。我认为,在看到伪代码后,有两个类似的问题更容易解释。这是第一个

SELECT P_CODE, P_DESCRIPT, @diff
FROM PRODUCT
WHERE @diff :=
    (SELECT ROUND(ABS(P_PRICE -(SUM(P_PRICE)/COUNT(P_PRICE))),2)
    FROM PRODUCT
    WHERE P_PRICE in
        (SELECT P_PRICE
        FROM PRODUCT));
基本上,我有一个product表,我试图在其中返回主键、描述以及所有条目的产品价格和平均价格之间的差异。在类似的注释中,这里是第二个问题

SELECT *, @val
FROM LINE
WHERE P_CODE in 
    (SELECT P_CODE
    FROM LINE
    HAVING COUNT(P_CODE) >
    (@val = (SELECT COUNT(*) FROM LINE)/(SELECT COUNT(DISTINCT P_CODE)
    FROM LINE)));
在这里,我试图返回行表中的所有字段,该行表基本上是一个收据表,该条目的产品售出的商品数量超过平均售出数量


清楚我想用这些做什么吗?我试图返回其他值以及计算值,如果不清楚,我只能使用列表形式的另一个表中的值来计算。我不太确定,但也许JOIN语句在这里可以工作?我是mysql新手,还不太了解如何最好地使用JOIN语句。如果有人能告诉我如何处理这些问题,或者至少给我指出一个链接,该链接描述了如何处理这些问题,因为我没有找到一个链接,它与一个返回平均价格的子查询连接:

SELECT p.p_code, p.p_descript, ROUND(ABS(p.p_price - x.avg_price)) AS price_diff
FROM product AS p
CROSS JOIN (
    SELECT AVG(p_price) AS avg_price
    FROM product
) AS x
请注意,有一个内置的AVG函数,您不需要使用SUM和COUNT。此外,从产品中选择p_价格中的p_价格在哪里也没有意义——该测试显然总是正确的

SELECT l.*
FROM line AS l
JOIN (
    SELECT p_code, COUNT(*) AS code_count
    FROM line
    GROUP BY p_code
) AS l1 ON l.p_code = l1.p_code
JOIN (
    SELECT COUNT(*)/COUNT(DISTINCT p_code) AS avg_count
    FROM line
) AS x ON l1.code_count > x.avg_count

与返回平均价格的子查询联接:

SELECT p.p_code, p.p_descript, ROUND(ABS(p.p_price - x.avg_price)) AS price_diff
FROM product AS p
CROSS JOIN (
    SELECT AVG(p_price) AS avg_price
    FROM product
) AS x
请注意,有一个内置的AVG函数,您不需要使用SUM和COUNT。此外,从产品中选择p_价格中的p_价格在哪里也没有意义——该测试显然总是正确的

SELECT l.*
FROM line AS l
JOIN (
    SELECT p_code, COUNT(*) AS code_count
    FROM line
    GROUP BY p_code
) AS l1 ON l.p_code = l1.p_code
JOIN (
    SELECT COUNT(*)/COUNT(DISTINCT p_code) AS avg_count
    FROM line
) AS x ON l1.code_count > x.avg_count
基本上,我有一个产品表,我试图返回主键、描述以及产品价格和所有条目的平均价格之间的差异

使用MySQL的用户变量会使查询更加困难

有很多方法可以满足你的需求

方法一

使用内部select或子查询

SELECT 
    PRODUCT.P_CODE
    , PRODUCT.P_DESCRIPT
    , ROUND(ABS((PRODUCT.P_PRICE) - (SELECT AVG(PRODUCT_INNER.P_PRICE) FROM PRODUCT AS PRODUCT_INNER)), 2) AS diff
FROM 
    PRODUCT
方法二

使用交叉连接

质疑

基本上,我有一个产品表,我试图返回主键、描述以及产品价格和所有条目的平均价格之间的差异

使用MySQL的用户变量会使查询更加困难

有很多方法可以满足你的需求

方法一

使用内部select或子查询

SELECT 
    PRODUCT.P_CODE
    , PRODUCT.P_DESCRIPT
    , ROUND(ABS((PRODUCT.P_PRICE) - (SELECT AVG(PRODUCT_INNER.P_PRICE) FROM PRODUCT AS PRODUCT_INNER)), 2) AS diff
FROM 
    PRODUCT
方法二

使用交叉连接

质疑


谢谢。因为我认为我需要使用连接,尽管我们从未使用过交叉连接。我知道有一个AVG函数,我可能一直这样,因为我实际上先写了第二个函数,需要在那里使用不同的P_代码,然后复制和粘贴了很多hanks。因为我认为我需要使用连接,尽管我们从未使用过交叉连接。我知道有一个AVG函数,我可能一直这样做,因为我实际上先写了第二个函数,需要不同的P_代码,然后复制粘贴