하나의 테이블에 두 개의 유사한 쿼리 표시

Lumsden

작년 같은 기간에 비해 지난 3 개월 동안 가장 많은 수익을 올린 의류를 반환하는 쿼리를 작성하려고합니다. 결과를 하나의 테이블에 표시하고 싶습니다. 쿼리의 clothing_id는 일치 할 수 있지만 일치하지 않을 수 있습니다. 일치하면 같은 행에 결과를 표시하고 싶습니다. 나는 clothing_id로 주문하고 싶다고 생각한다.

나는 지금까지 거의 작동하지만 TotalDaysHired, MoneyIn, LastYrTotalDaysHired 및 LastYrMoneyIn에 대해 잘못된 / 이상한 값을 반환하는 이것을 생각해 냈습니다. 왜 그런지 모르겠어요. 또한 실행되지 않을 a.garmentid에 의한 내부 조인 ON a.garmentid = b.garmentid 순서로 두 쿼리를 조인하려고 시도했습니다.

SELECT garment_hire_line.date_out as 'dateout', 
        garment_hire_line.garment_id as 'garmentid', 
        catalogue.description as 'description', 
        SUM(garment_hire_line.days) AS 'TotalDaysHired', 
        SUM(garment_hire_line.days*catalogue.daily_rate) AS 'MoneyIn', 
        '' as 'LastYrTotalDaysHired', 
        '' as 'LastYrMoneyIn'
FROM garment_hire_line
    INNER JOIN garment ON garment_hire_line.garment_id = garment.garment_id
    INNER JOIN catalogue ON garment.catalogue_id = catalogue.catalogue_id
WHERE garment_hire_line.date_out>DATE_SUB(NOW(),INTERVAL 3 MONTH)
GROUP by garment_hire_line.garment_id
UNION
SELECT garment_hire_line.date_out as 'dateout', 
        garment_hire_line.garment_id as 'garmentid', 
        catalogue.description as 'description','' as 'TotalDaysHired',
         '' as 'MoneyIn', 
        SUM(garment_hire_line.days) AS 'LastYrTotalDaysHired', 
        SUM(garment_hire_line.days*catalogue.daily_rate) AS 'LastYrMoneyIn'
FROM garment_hire_line
    INNER JOIN garment ON garment_hire_line.garment_id = garment.garment_id
    INNER JOIN catalogue ON garment.catalogue_id = catalogue.catalogue_id
WHERE garment_hire_line.date_out<DATE_SUB(NOW(),INTERVAL 1 YEAR)
AND garment_hire_line.date_out>DATE_SUB(NOW(),INTERVAL '1:3' YEAR_MONTH)
GROUP by garment_hire_line.garment_id

clothing_hire_line

garment_line_id date_out Days return_date discount hire_id garment_id
8               12/06/2012  4   16/06/2012  0          1        4
9               12/06/2012  5   17/06/2012  0          1        2
10              12/06/2012  4   16/06/2012  0          1        4
11              11/07/2012  3   14/07/2012  10         2        2
12              10/08/2012  3   13/08/2012  0          3        4
13              09/09/2012  2   11/09/2012  5          4        3
14              09/01/2017  3   12/09/2017  0          5        3

목록

catalogue_id|   description|     designer|    Type|    daily_rate|  supplier_name|  supplier_purchase_price|    date_purchased| quantity|
    1             Hat        Elizabeth Kate Accessory        3       Lids              25                         28/02/2017    3
    2             Dress      Calvin Klein   Designer Outfit 20       Glam              260                        12/05/2012    2
    3             Handbag        Gucci      Accessory        4       Hold On           200                        01/01/2017    4
    4             Witches Dress  null       Fancy Dress      12      Fancy Fred        74                         21/05/2012    7

외피

garment_id  Colour    sizing    catalogue_id    location_id supplier_id
1           Black     Medium           1           2           1
2           Black     10               2           2           2
3           Black     8                2           2           3
4           Black     0                3           2           4
5           Red       Child            4           2           1
6           Black     Medium           1           2           2
7           Black     10               2           2           3
Tricot

주요 문제는 SQL 쿼리에서 ''실제로 숫자 데이터를 반환해야하는 일부 필드에 사용한다는 것입니다. 따라서 ''동일한 열에 및 3.00이있는 일부 레코드를 얻습니다 . 이는 데이터 유형의 충돌입니다. 이로 인해 원하지 않는 변환이 발생하여 가비지 출력이 표시됩니다.

이 문제 ''null.

그러나 다음과 같은 몇 가지 다른 문제를 살펴볼 수도 있습니다.

  • 의류 ID별로 그룹화하면 특정 의류가 같은 기간에 여러 번 고용되었을 때 첫 번째 열에 표시되는 날짜를 제어 할 수 없습니다. 실제로이 쿼리는 MySql의 최신 버전에서 유효하지 않으며 (허용 옵션을 설정하지 않는 한) 표준 SQL 규칙을 위반합니다. 따라서 쿼리에서 해당 열을 제거하거나 집계 함수 (예 :)를 적용 MAX하거나이를 기준으로 그룹화해야합니다.

  • 를 사용 union하면 두 마침표를 나란히 표시하는 것을 실제로 활용하지 못할 것 null입니다. 한 레코드의 4 개 필드 중 2 개는 항상 . 이 작업을 수행하지 않고 집계 함수 union에서 표현식으로 요약 한 내용을 필터링 할 수 sum있습니다.

그래서이 쿼리를 제안합니다.

SELECT      MAX(garment_hire_line.date_out) as `LastDateOut`, 
            garment_hire_line.garment_id as `garmentid`, 
            catalogue.description as `description`, 
            SUM(CASE WHEN garment_hire_line.date_out > DATE_SUB(NOW(),INTERVAL 3 MONTH)
                 THEN garment_hire_line.days
                 ELSE 0
            END) AS `TotalDaysHired`, 
            SUM(CASE WHEN garment_hire_line.date_out > DATE_SUB(NOW(),INTERVAL 3 MONTH)
                 THEN garment_hire_line.days*catalogue.daily_rate
                 ELSE 0
            END) AS `MoneyIn`, 
            SUM(CASE WHEN garment_hire_line.date_out <= DATE_SUB(NOW(),INTERVAL 3 MONTH)
                 THEN garment_hire_line.days
                 ELSE 0
            END) AS `LastYrTotalDaysHired`, 
            SUM(CASE WHEN garment_hire_line.date_out <= DATE_SUB(NOW(),INTERVAL 3 MONTH)
                 THEN garment_hire_line.days*catalogue.daily_rate
                 ELSE 0
            END) AS `LastYrMoneyIn` 
FROM        garment_hire_line
INNER JOIN  garment ON garment_hire_line.garment_id = garment.garment_id
INNER JOIN  catalogue ON garment.catalogue_id = catalogue.catalogue_id
WHERE       garment_hire_line.date_out > DATE_SUB(NOW(),INTERVAL 3 MONTH)
         OR (   garment_hire_line.date_out > DATE_SUB(NOW(),INTERVAL 15 MONTH)
            AND garment_hire_line.date_out < DATE_SUB(NOW(),INTERVAL 12 MONTH)
            )
GROUP BY    garment_hire_line.garment_id
ORDER BY    1

각 날짜에 대해 별도의 줄을 사용하려면 MAX함수 를 제거 garment_hire_line.date_out하고 GROUP BY목록에 추가 하십시오.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

하나의 쿼리에 두 개의 MySQL 선택 표시

분류에서Dev

테이블의 한 열을 두 개의 개별 열로 표시하는 하위 쿼리

분류에서Dev

PHP : 하나의 쿼리에 두 개의 테이블

분류에서Dev

Postgres 선택 쿼리 : 두 개의 다른 테이블에서 표시 수 선택

분류에서Dev

두 개의 SQL 쿼리를 하나의 깔끔한 테이블로 결합

분류에서Dev

SQL 쿼리 두 테이블에서 두 개의 개별 단위를 상관시켜 하나의 테이블에서 값 나누기

분류에서Dev

두 개의 쿼리를 공유 테이블에 결합

분류에서Dev

많은 유사한 테이블에 대한 하나의 쿼리

분류에서Dev

동일한 테이블에서 두 개의 쿼리 중단

분류에서Dev

PostgreSQL을 사용하여 두 개의 선택 쿼리 결과를 하나의 테이블 행에 추가

분류에서Dev

두 개의 SELECT 쿼리를 병합하고 하나의 테이블에 데이터를 표시 하시겠습니까?

분류에서Dev

하나의 테이블에 3 개의 동시 SQL 쿼리

분류에서Dev

두 테이블의 잔액을 표시하는 SQL 쿼리

분류에서Dev

동일한 테이블에 두 개의 배열 표시

분류에서Dev

필드 1의 고유 값과 필드 2의 해당 값 (순서대로)을 표시하는 두 개의 열이있는 테이블을 하나로 가져 오는 MSSQL 쿼리에 도움이 필요하십니까?

분류에서Dev

하나의 테이블에서 두 개의 ng-repeat를 사용하고 조건부로 표시

분류에서Dev

하나의 문에 두 개의 쿼리

분류에서Dev

두 개의 쿼리를 하나의 테이블에 결합하고 값 빼기

분류에서Dev

동일한 테이블에서 생성 된 두 개의 하위 쿼리 결합

분류에서Dev

Wordpress에 쿼리 사용자 정의 테이블 표시

분류에서Dev

두 개의 열을 키로 사용하는 두 테이블에 대한 SQL 쿼리

분류에서Dev

두 개의 다른 테이블에서 두 개의 다른 열에 대한 쿼리 업데이트 -MySQL

분류에서Dev

두 개의 WHERE 절로 쿼리를 제한 할 때 날짜없이 행을 표시하는 PHP 쿼리

분류에서Dev

두 개의 거대한 테이블 사이의 단일 열에 대한 쿼리 업데이트

분류에서Dev

SQL 쿼리-두 테이블의 고유 개수 가져 오기

분류에서Dev

두 날짜 사이의 출석을 표시하는 SQL 쿼리

분류에서Dev

Oracle INSERT를 하나의 쿼리로 두 테이블에 삽입

분류에서Dev

MySQL은 동일한 테이블에서 두 개의 쿼리를 조인

분류에서Dev

두 개의 유사한 테이블을 쿼리하고 정렬 된 결과 결합

Related 관련 기사

  1. 1

    하나의 쿼리에 두 개의 MySQL 선택 표시

  2. 2

    테이블의 한 열을 두 개의 개별 열로 표시하는 하위 쿼리

  3. 3

    PHP : 하나의 쿼리에 두 개의 테이블

  4. 4

    Postgres 선택 쿼리 : 두 개의 다른 테이블에서 표시 수 선택

  5. 5

    두 개의 SQL 쿼리를 하나의 깔끔한 테이블로 결합

  6. 6

    SQL 쿼리 두 테이블에서 두 개의 개별 단위를 상관시켜 하나의 테이블에서 값 나누기

  7. 7

    두 개의 쿼리를 공유 테이블에 결합

  8. 8

    많은 유사한 테이블에 대한 하나의 쿼리

  9. 9

    동일한 테이블에서 두 개의 쿼리 중단

  10. 10

    PostgreSQL을 사용하여 두 개의 선택 쿼리 결과를 하나의 테이블 행에 추가

  11. 11

    두 개의 SELECT 쿼리를 병합하고 하나의 테이블에 데이터를 표시 하시겠습니까?

  12. 12

    하나의 테이블에 3 개의 동시 SQL 쿼리

  13. 13

    두 테이블의 잔액을 표시하는 SQL 쿼리

  14. 14

    동일한 테이블에 두 개의 배열 표시

  15. 15

    필드 1의 고유 값과 필드 2의 해당 값 (순서대로)을 표시하는 두 개의 열이있는 테이블을 하나로 가져 오는 MSSQL 쿼리에 도움이 필요하십니까?

  16. 16

    하나의 테이블에서 두 개의 ng-repeat를 사용하고 조건부로 표시

  17. 17

    하나의 문에 두 개의 쿼리

  18. 18

    두 개의 쿼리를 하나의 테이블에 결합하고 값 빼기

  19. 19

    동일한 테이블에서 생성 된 두 개의 하위 쿼리 결합

  20. 20

    Wordpress에 쿼리 사용자 정의 테이블 표시

  21. 21

    두 개의 열을 키로 사용하는 두 테이블에 대한 SQL 쿼리

  22. 22

    두 개의 다른 테이블에서 두 개의 다른 열에 대한 쿼리 업데이트 -MySQL

  23. 23

    두 개의 WHERE 절로 쿼리를 제한 할 때 날짜없이 행을 표시하는 PHP 쿼리

  24. 24

    두 개의 거대한 테이블 사이의 단일 열에 대한 쿼리 업데이트

  25. 25

    SQL 쿼리-두 테이블의 고유 개수 가져 오기

  26. 26

    두 날짜 사이의 출석을 표시하는 SQL 쿼리

  27. 27

    Oracle INSERT를 하나의 쿼리로 두 테이블에 삽입

  28. 28

    MySQL은 동일한 테이블에서 두 개의 쿼리를 조인

  29. 29

    두 개의 유사한 테이블을 쿼리하고 정렬 된 결과 결합

뜨겁다태그

보관