2014-01-17 4 views
0

Я изучаю SQL и занимаюсь практикой. Я не могу дать вам точный сценарий, потому что веб-сайт, на котором я практикую, не хочет, чтобы какое-либо решение находилось непосредственно в Интернете, поэтому я объясню ситуацию другими словами. Вопрос, который я застрял, заключается в использовании таблицы XYZ с столбцами X, Y и Z. Столбец X также может иметь дубликаты и столбцы Z. что мне нужно, чтобы найти это крестики, которые всегда имеют одинаковое значение в Z. ТакSQL Query возвращает записи, которые всегда имеют одинаковое значение

X  Y  Z 
1  ?  a 
1  ?  a 
2  ?  b 
2  ?  c 
3  ?  c 
3  ?  a

бы вернуть мне 1, потому что, когда Х 1 Z всегда.

Моя настоящая проблема заключается в том, что я чувствую, что мне не хватает знаний SQL, чтобы добиться этого. Я был бы признателен, если бы кто-нибудь мог дать мне подсказку, а не решение, но, возможно, ссылку на знание SQL, которое я потерял, или краткое объяснение инструкции SQL, которая может заставить меня сделать это.

В противном случае имейте приятный день. Дэвид.

Редактировать: SELECT X FROM XYZ GROUP BY X HOWING COUNT (DISTINCT Z) = 1, и я это хорошо понимаю. Теперь я не могу понять, как добавить столбец Z в набор результатов.

+0

SO для вопросов и ответов ** ** не намеки. –

ответ

1
select x, min(z) 
from tab 
group by x 
having min(z) = max(z) 
-- or 
having count(distinct z) = 1 
+0

Спасибо, это помогло мне лучше понять группу лучше. Я все еще не понимаю, как включить столбец в select, не меняя набор результатов. Я понимаю, что если я включу этот столбец в select, мне также нужно будет включить его в группу, но когда я сделаю набор результатов, похоже, что он никогда не принимал предложение HAVING и возвращал мне в 4 раза больше строк. С группой я ничего не понимаю. – Elound

+0

Если вы добавите другой столбец (Y) в GROUP BY, вы получите другой результат, он будет группироваться для каждой отдельной комбинации обоих столбцов (X и Y). Вместо этого вы можете использовать MIN (Y), но кажется, что вам нужны все строки, где X = 1. Если это то, что вы хотите, я тоже могу добавить решение. :) – dnoeth

+0

Я только что прочитал ваше редактирование: просто используйте MIN (Z), я изменю свой ответ .... – dnoeth

Смежные вопросы