簡體   English   中英

MySQL-在特定條件下從兩列中選擇

[英]Mysql- Select from two columns on a particular condition

我有兩個表Table1和Table2通過xid和Yid相互連接。

表格1

xid(int)    category(varchar)       subcat(varchar)

1           Venue                   Resort
2           Venue                   Resort
3           Venue                   Resort
4           Venue                   Resort
5           Venue                   Resort
6           Venue                   Resort
7           Venue                   Banquet Hall
8           Venue                   Resort
9           Apparel                 Designer

表2

Yid(int)    minp(varchar)           maxp(varchar)

1           800                     1000
2           900                     1200
3                                   1100
4           1300                    1600
5                                   1800
6           800                     2000
7           800                     1000
8           1500                    2100
9           15000                   60000

我將這些供應商分為三類,第一類是價格低於盧比的供應商。 1000.第二類是針對價格低於1500且大於1000且價格大於1500的供應商,進入第三類。 目前,我僅將價格與maxp及其適用於我的產品進行比較。

我用於與maxp比較的查詢是

SELECT xid from Table1,Table2 WHERE
Table1.xid=Table2.Yid 
AND category='venue' 
AND subcat='Resort' 
AND maxp<=1000

我得到的輸出是

xid

1
7

現在我想將價格與minp和maxp進行比較,我想計算並獲取所有xid,其中minp或maxp中的任何一個小於1000,介於1000到1500之間,大於1500。

期望的輸出低於Rs。 1000

xid

1
2
6
7

期望輸出超過盧比。 1000且小於等於1500

xid

2
3
4
8

注意:由於某些原因,我不能將minp和maxp的數據類型從varchar更改為int或long,如果minp為空也無法與之比較。

提前致謝...

您需要根據預期結果在兩個列中都進行檢入。

SELECT xid 
from Table1 
INNER JOIN Table2 
        ON Table1.xid=Table2.Yid 
Where category='venue' 
AND subcat='Resort' 
AND (minp<=1000 or minp<=1000)
and minp <> ''

要找到盧比。 1000且小於等於1500

SELECT xid 
from Table1 
INNER JOIN Table2 
        ON Table1.xid=Table2.Yid 
Where category='venue' 
AND subcat='Resort' 
AND (minp > 1000 or maxp > 1000) and (minp <= 1500 or maxp <= 1500)
and minp <> ''

注意:開始使用INNER JOIN語法,而不是舊式逗號分隔的INNER JOIN

我認為您可以使用以下方式:

   SELECT xid , CATEGORY, SUBCAT, minp, maxp
    , CASE WHEN COALESCE(minp,0)<=1000  OR COALESCE(maxp,0)<=1000 THEN 1 ELSE 0 END AS CAT1
    , CASE WHEN (COALESCE(minp,0)>1000 AND COALESCE(minp,0)<=1500) OR (COALESCE(maxp,0)>1000 AND COALESCE(maxp,0)<=1500) THEN 1 ELSE 0 END AS CAT2
    , CASE WHEN COALESCE(minp,0)>1500 OR COALESCE(maxp,0)>1500 THEN 1 ELSE 0 END AS CAT3                        
from Table1 A
INNER JOIN Table2 B ON A.xid=B.Yid 
;

輸出:

xid CATEGORY SUBCAT   minp  maxp    CAT1    CAT2    CAT3
1   Venue   Resort    800   1000    1   0   0
2   Venue   Resort    900   1200    1   1   0
3   Venue   Resort    NULL  1100    1   1   0
4   Venue   Resort    1300  1600    0   1   1
5   Venue   Resort    NULL  1800    1   0   1
6   Venue   Resort    800    2000   1   0   1
7   Venue   BanquetH  800   1000    1   0   0
8   Venue   Resort    1500  2100    0   1   1
9   Apparel Designer 15000  60000   0   0   1

要為每個類別添加計數,您可以使用:

SELECT * 
FROM 
 (SELECT xid , CATEGORY, SUBCAT, minp, maxp
    , CASE WHEN COALESCE(minp,0)<=1000  OR COALESCE(maxp,0)<=1000 THEN 1 ELSE 0 END AS CAT1
    , CASE WHEN (COALESCE(minp,0)>1000 AND COALESCE(minp,0)<=1500) OR (COALESCE(maxp,0)>1000 AND COALESCE(maxp,0)<=1500) THEN 1 ELSE 0 END AS CAT2
    , CASE WHEN COALESCE(minp,0)>1500 OR COALESCE(maxp,0)>1500 THEN 1 ELSE 0 END AS CAT3                    
from Table1 A
INNER JOIN Table2 B ON A.xid=B.Yid ) X
CROSS JOIN (SELECT SUM(CASE WHEN CAT1=1 THEN 1 ELSE 0 END) AS CAT1_RC
                ,SUM(CASE WHEN CAT2=1 THEN 1 ELSE 0 END) AS CAT2_RC
                , SUM(CASE WHEN CAT3=1 THEN 1 ELSE 0 END) AS CAT3_RC
              FROM (SELECT xid , CATEGORY, SUBCAT, minp, maxp
                     , CASE WHEN COALESCE(minp,0)<=1000  OR COALESCE(maxp,0)<=1000 THEN 1 ELSE 0 END AS CAT1
                     , CASE WHEN (COALESCE(minp,0)>1000 AND COALESCE(minp,0)<=1500) OR (COALESCE(maxp,0)>1000 AND COALESCE(maxp,0)<=1500) THEN 1 ELSE 0 END AS CAT2
                     , CASE WHEN COALESCE(minp,0)>1500 OR COALESCE(maxp,0)>1500 THEN 1 ELSE 0 END AS CAT3                   
                     from Table1 A
                     INNER JOIN Table2 B ON A.xid=B.Yid) X1
              ) Y
              ;

輸出:

+-----+----------+-----------+-------+-------+------+------+------+---------+---------+---------+
| xid | CATEGORY |  SUBCAT   | minp  | maxp  | CAT1 | CAT2 | CAT3 | CAT1_RC | CAT2_RC | CAT3_RC |
+-----+----------+-----------+-------+-------+------+------+------+---------+---------+---------+
|   1 | Venue    | Resort    | 800   |  1000 |    1 |    0 |    0 |       6 |       4 |       5 |
|   2 | Venue    | Resort    | 900   |  1200 |    1 |    1 |    0 |       6 |       4 |       5 |
|   3 | Venue    | Resort    | NULL  |  1100 |    1 |    1 |    0 |       6 |       4 |       5 |
|   4 | Venue    | Resort    | 1300  |  1600 |    0 |    1 |    1 |       6 |       4 |       5 |
|   5 | Venue    | Resort    | NULL  |  1800 |    1 |    0 |    1 |       6 |       4 |       5 |
|   6 | Venue    | Resort    | 800   |  2000 |    1 |    0 |    1 |       6 |       4 |       5 |
|   7 | Venue    | Banquet H | 800   |  1000 |    1 |    0 |    0 |       6 |       4 |       5 |
|   8 | Venue    | Resort    | 1500  |  2100 |    0 |    1 |    1 |       6 |       4 |       5 |
|   9 | Apparel  | Designer  | 15000 | 60000 |    0 |    0 |    1 |       6 |       4 |       5 |
+-----+----------+-----------+-------+-------+------+------+------+---------+---------+---------+

我認為您需要嘗試一下。

1.您想將價格與minp和maxp進行比較,我想計算並獲取所有xid,其中minp或maxp中的任何一個小於1000,介於1000到1500之間,大於1500。

從表1 t1,表2 t2中選擇t1.xid,其中t1.xid = t2.Yid AND t1.category ='venue'AND t1.subcat ='Resort'AND(t2.maxp <= 1000或t2.minp <= 1000)

  1. 輸出超過Rs。 1000且小於等於1500

從表1 t1,表2 t2中選擇t1.xid,其中t1.xid = t2.Yid AND t1.category ='venue'AND t1.subcat ='Resort'AND(((t2.maxp> = 1000和t2.maxp <= 1500 )或(t2.minp> = 1000和t2.minp <= 1500)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM