·æÀûµÄSQL:µØÓò·¶Î§ÄÚ×î´óÊýͳ¼Æ
ÕâÊÇÔÚ×öÒ»¸ö¿Í»§¹ÜÀí
ϵͳʱÓöµ½µÄÎÊÌ⣬¹«Ë¾Ã¿ÄêÐèÒª°´ÏúÊÛÇøÓòÆÀÑ¡³ö¹ºÂòÁ¿×î´óµÄ¿Í»§½øÐе¥¶À½±Àø¡£ÇøÓò»®·ÖʹÓõØÓò±àÂëÆðÖ¹Çø¼ä·½Ê½£¬ÀýÈ磬»ª¶«µØÇøµÄÆðÖ¹±àÂëÊÇ10001¡«10003£¬ÔÚ10001¡¢10002¡¢10003ÇøÓòµÄ¿Í»§¶¼Á¥ÊôÓÚ»ª¶«µØÇø¡£ÏÂÃæÊÇ´´½¨Ê¾ÀýµÄ´úÂ룬Area±íÖдæ·Å×ÅÇøÓò»®·Ö·¶Î§£¬Sales´æ·Å×Åÿ¸öÇøÓòÖпͻ§µÄ¹ºÂòÐÅÏ¢¡£
www.2cto.com
CREATE TABLE Areas
(area_name char(25) NOT NULL,
start_codeint NOT NULL,
end_codeint NOT NULL,
CHECK(start_code <= end_code));
CREATE TABLE Sales
(sale_id int,
cust_namechar(15),
cust_codeint,
sale_amtdecimal (8,2));
INSERT INTO Areas
VALUES ('»ª¶«', 10001, 10003),
('»ªÄÏ', 10004, 10006),
('»ª±±', 10007, 10009);
INSERT INTO Sales
VALUES (1, 'ÕÅÈý', 10001, 1000.00),
(2, 'ÕÅÈý', 10002, 1000.00),
(3, 'ÀîËÄ', 10001, 4000.00),
(4, 'ÍõÎå', 10005, 1000.00),
(5, 'ÍõÎå', 10006, 2000.00),
(6, 'ÕÔÁù', 10004, 1500.00);
www.2cto.com
Ҫͳ¼Æ³öÿ¸öÇøÓòÖйºÂòÁ¿×î´óµÄ¿Í»§£¬ÎÒÃÇÊ×ÏÈÏëµ½µÄÊÇʹÓÃGROUP BY×Ӿ佸ÐзÖÀà»ã×Ü£¬²Î¿¼ÏÂÃæµÄÓï¾ä£º
SELECT A.area_name, S.cust_name, SUM(S.sale_amt)AS sale_amt
FROM Areas AS A
JOIN SalesAS S
ONS.cust_code BETWEEN A.start_code AND A.end_code
GROUP BY A.area_name, S.cust_name
ORDER BY area_name;
±í19-12 ʹÓÃGROUP BY°´ÇøÓò¡¢¿Í»§·ÖÀà»ã×ܽá¹û
area_name
cust_name
sale_amt
»ª¶«
ÀîËÄ
4000.00
»ª¶«
ÕÅÈý
2000.00
»ªÄÏ
ÍõÎå
3000.00
»ªÄÏ
ÕÔÁù
1500.00
´ÓÉϱí¿ÉÒÔ¿´³ö£¬ÔÚ»ª¶«µØÇøÀîËĵĹºÂòÁ¿×î´ó£¬»ªÄϵØÇøÍõÎåµÄ¹ºÂòÁ¿×î´ó¡£Èç¹û½öͳ¼ÆÃ¿µØÇøµÄ×î´óÏúÊ۶²»¿¼Âǿͻ§Ãû³Æ£¬ÍêÈ«¿ÉÒÔÔÚÉϱíµÄ»ù´¡ÉÏʹÓÃÀàËÆÏÂÃæµÄÓï¾ä£º
SELECT area_name, MAX(sale_amt)
FROM [±í19-21]
GROUP BY area_name;
ÏÂÃæµÄÓï¾ä½«GROUP BY·Ö×éͳ¼Æ·â×°ÔÚCTEÖУ¬È»ºó½«CTE´ò¿ªÁ½´Î£¬È¡³öÃ¿ÇøÓòÖйºÂòÁ¿×î´óµÄ¿Í»§¡£²éѯ½á¹ûÈç±í19-13Ëùʾ¡£
WITH CTE (area_name, cust_name, sale_amt)
AS (SELECT A.area_name, S.cust_name,SUM(S.sale_amt)
FROMAreas AS A
JOINSales AS S
ONS.cust_code BETWEEN A.start_code AND A.end_code
GROUP BYA.area_name, S.cust_name)
SELECT C1.area_name, C1.cust_name, C1.sale_amt
FROM CTE AS C1
WHERE C1.sale_amt = (SELECT MAX(C2.sale_amt)
FROM CTE AS C2
WHERE C2.area_name =C1.area_name);
±í19-13 ²éѯ½á¹û
area_name
cust_name
sale_amt
»ªÄÏ
ÍõÎå
3000.00
»ª¶«
ÀîËÄ
4000.00