من الممكن أن يكون لديك جملة من أين بفقرة؟

StackOverflow https://stackoverflow.com/questions/1671968

  •  13-09-2019
  •  | 
  •  

سؤال

هل من الممكن استخدام جملة أين بعد بند؟

أول شيء يأتي إلى ذهني هو استفسارات فرعية، لكنني لست متأكدا.

ملاحظة: إذا كانت الإجابة إيجابية، فهل يمكنك إعطاء بعض الأمثلة؟

هل كانت مفيدة؟

المحلول

لا، ليس في نفس الاستعلام.

ال where جملة يذهب قبل having و ال group by. وبعد إذا كنت ترغب في تصفية السجلات قبل تجميع الشرط يذهب في where جملة، وإذا كنت ترغب في تصفية الخروج من السجلات المجمعة، فإن الشرط يذهب في having بند:

select ...
from ...
where ...
group by ...
having ...

إذا لم يكن أي من هؤلاء من الممكن استخدامه لبعض الأسباب الفردية، فعليك إجراء استعلام فرعي بحيث يمكنك وضع where جملة في الاستعلام الخارجي:

select ...
from (
   select ...
   from ...
   where ...
   group by ...
   having ...
) x
where ...

نصائح أخرى

البند له هو مجرد جملة بعد مجموعة من قبل المجموعة. لماذا لا تضع الظروف الخاصة بك في جملة لها؟

إذا كان هناك سؤال خدعة، فمن الممكن إذا كان المكان والخلال ليس في نفس المستوى، كما ذكرت، مع Sacquery.

أعتقد أن شيئا من هذا القبيل من شأنه أن يعمل

وجود قيمة = (حدد MAX (القيمة) من Foo حيث Crit = 123)

ملاحظة: لماذا كنت تسأل؟ هل لديك مشكلة محددة؟

PSS: موافق سخيفة لي، فاتني علامة "المقابلة *" ...

من تحديد المساعدة

معالجة ترتيب حيث، Group by، وبعد خطوات الخطوات التالية إظهار أمر المعالجة لبيان محدد مع وجود جملة ومجموعة بمجموعة واحدة، وبقرة له:

من جملة إزاد مجموعة نتيجة أولية.

المكان الذي يستثني فيه الصفوف التي لا تلبي شرط البحث.

تقوم المجموعة بقطعة بجمع الصفوف المحددة في مجموعة واحدة لكل قيمة فريدة في جملة المجموعة.

وظائف إجمالية المحددة في قائمة تحديد قيم ملخص لكل مجموعة.

بندات لها باستثناء الصفوف بالإضافة إلى ذلك لا تلبي شرط البحث.

لذلك، لا لا يمكنك.

في نفس النطاق، الإجابة لا. إذا سمحت للندد، يمكنك تجنب استخدام HAVING تماما.

أظن HAVING هو مفارقة تاريخية. هيو داروين يشير إلى HAVING باسم "حماقة الاستفسارات المنظمة":

في SQL القديم، WHERE لا يمكن استخدام جملة حول نتائج التجميع، لذلك اضطروا إلى ابتكار HAVING (بنفس معنى WHERE):

SELECT D#, AVG(Salary) AS Avg_Sal
  FROM Emp
 GROUP 
    BY D#
HAVING AVG(Salary) > 999;

ولكن هل كان لدينا من أي وقت مضى HAVING إذا كان في عام 1979 يمكن للمرء أن يكتب:

SELECT * 
  FROM (
        SELECT D#, AVG(Sal) AS Avg_Sal
          FROM Emp
         GROUP 
            BY D# 
       )
      AS dummy
WHERE Avg_Sal > 999;

أشك بشدة في أن الإجابة على سؤال داروين لا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top