簡體   English   中英

SQL查詢創建

[英]SQL query creation

我必須執行查詢而不使用顯示擁有單個擁有者的最大汽車數量的汽車品牌的視圖。

那是我的桌子

CAR(idcar, brand, name, year_p)
OWNER(idowner,name, b_date)
PROPERTY(idcar,idowner,date_b, date_s)

那就是我寫的

SELECT Car.brand, COUNT(PROPERTY.idowner) as con
FROM PROPERTY JOIN CAR ON Car.idcar=Property.idcar
GROUP BY Car.brand
ORDER BY con ASC
LIMIT 1;

沒關系? 我可以做些什么來改善它?

那應該是這樣的

       CAR
-----------------
1|FIAT|test1|2000
2|Alfa|test2|2011
3|FIAT|test3|2001
4|Alfa|test4|2006
5|Alfa|test5|2004

   OWNER
-----------
1|John|1990
2|Jack|1980
3|Sam |1991
4|Rick|1980
5|Cris|1993
6|Holm|1992


  PROPERTY
-------------
1|1|2000|2000
2|1|2001|2003
3|2|2000|2004
1|3|2002|2005
4|4|2004|2006
5|6|2003|2008
2|5|2001|2009

因此查詢應返回Alfa,因為我有3個人只有一輛汽車,而這3個人有1個人(所以是3 Alfa)。 不可能是FIAT,因為我只有2個人,並且只有一輛是FIAT(所以2 FIAT)。 擁有者n1被排除在外,因為他有2輛車

我認為您的查詢走上了正確的道路,只需要稍加修改即可...

首先,如果您要選擇擁有者最多的品牌,則應按降序排列,這樣最大數量將排在最前面……其次,您需要添加WHERE子句,該子句將排除擁有多於一輛汽車的所有所有者。 。

它看起來應該像這樣:

SELECT c.brand, COUNT(p.idowner) as con
FROM PROPERTY p
JOIN CAR c
ON c.idcar=p.idcar
WHERE p.idowner NOT IN (SELECT idowner
                        FROM (SELECT idowner, COUNT(idowner) as c
                              FROM PROPERTY
                              GROUP BY idowner) x
                        WHERE c > 1)
GROUP BY c.brand
ORDER BY con DESC
LIMIT 1;

這是SQL Fiddle ,看看它是如何工作的...

GL!

這個評論太長了。

您的查詢不正確。 它將返回擁有最多汽車屬性的品牌。 這可能與或可能與所有者數量無關。 我確定存在某種關系(“無屬性”->“無所有者”,反之亦然)。

無論如何,我不知道您所說的“擁有一個擁有者的汽車的最大數量”。 您應該使用示例數據和所需結果編輯問題。 SQL Fiddle也將有所幫助。

 --CTE to Get single owner WITH CTEsingleowner(ct, idowner) AS (SELECT Count(1) AS ct, idowner FROM property WITH(nolock) GROUP BY idowner HAVING Count(1) = 1) -- Select brand with maximum number of single owner -- with ties is used to resolve confilict more than one record set returned SELECT TOP (1) WITH ties Count(1) AS cnt, brand FROM CTEsingleowner ct JOIN property p WITH(nolock) ON p.idowner = ct.idowner JOIN car c WITH(nolock) ON ( c.idcar = p.idcar ) GROUP BY brand ORDER BY cnt DESC ; 

--CTE獲得單一所有者

WITH CTEsingleowner(ct,idowner)AS(SELECT Count(1)AS ct,idowner FROM property WITH(nolock)GROUP BY idowner HAVING Count(1)= 1)

-選擇單身所有者人數最多的品牌-帶領帶用於解決多於一行返回的沖突

SELECT TOP(1)with Count(1)AS cnt,brand from CTEsingleowner ct JOIN property p WITH(nolock)ON p.idowner = ct.idowner JOIN car c WITH(nolock)ON(c.idcar = p.idcar) GROUP BY品牌ORDER BY cnt DESC;

暫無
暫無

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

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